knockout简单实用教程3

Cesium knockout怎么用? Cesium.knockout能够使Cesium球体监听html控件, 从而根据控件的值实时改变一些地图属性 阅读详情

在之前的文章里面介绍了一些KO的基本用法。包括基本的绑定方式,基本的ko的绑定语法包括text绑定,html绑定等等(如有不明请参照上两篇文章),下面呢介绍一下关于ko的其他方面的知识。包括比较特殊绑定方式和语法还有KO官方mapping插件的使用等等。对了在前面的文章中好像漏掉了属性绑定的的介绍。那就先简单介绍下。属性绑定吧。直接上代码。

%26lt;a data-bind="attr: { href: url, title: details }"%26gt;
    Report
%26lt;/a%26gt;
 
%26lt;script type="text/javascript"%26gt;
    var viewModel = {
        url: ko.observable("year-end.html"),
        details: ko.observable("Report including final year-end statistics")
    };
%26lt;/script%26gt;

这段代码不做过多解释了相信看过之前的文章就能明白.(支持所有的dom属性的绑定)。

下面重点说说比较特殊的几种绑定方式。

%26nbsp;

1uniquename 绑定(用的不多)

uniquename绑定确保了某一个dom元素有一个唯一的名称属性(name属性),如果你没有设置那么会默认给一个唯一的字符串

绑定方式如下

%26lt;input data-bind="value: someModelProperty, uniqueName: true" /%26gt;

在一些特殊的情况下可能用的上比如在IE6下 单选按钮必须要有name属性。还有就是在%26nbsp;jQuery Validation 验证能能避免验证的和ko绑定的混淆.

%26nbsp;

2模板绑定 temple 绑定

可以指定一个模版。然后把模版绑定到指定的dom元素中 ,先给出代码下面在进行解释

%26lt;h2%26gt;Participants%26lt;/h2%26gt;
Here are the participants:
%26lt;div data-bind="template: { name: 'person-template', data: buyer }"%26gt;%26lt;/div%26gt;
%26lt;div data-bind="template: { name: 'person-template', data: seller }"%26gt;%26lt;/div%26gt;
 
%26lt;script type="text/html" id="person-template"%26gt;
    %26lt;h3 data-bind="text: name"%26gt;%26lt;/h3%26gt;
    %26lt;p%26gt;Credits: %26lt;span data-bind="text: credits"%26gt;%26lt;/span%26gt;%26lt;/p%26gt;
%26lt;/script%26gt;
 
%26lt;script type="text/javascript"%26gt;
     function MyViewModel() {
         this.buyer = { name: 'Franklin', credits: 250 };
         this.seller = { name: 'Mario', credits: 5800 };
     }
     ko.applyBindings(new MyViewModel());
%26lt;/script%26gt;

在script 里面的就是模板。在模板中也可以跟普通的绑定方式一样的去绑定。在确定模板后。我们就可以在具体的dom元素中去绑定了。

name 代表模板的id %26nbsp;data 则是指定具体的vm里面的数据对象。(这里也可以用foreach,后面来说明)。

在模板绑定中也可以用foreach来循环数据.下面给出代码

%26lt;h2%26gt;Participants%26lt;/h2%26gt;
Here are the participants:
%26lt;div data-bind="template: { name: 'person-template', foreach: people }"%26gt;%26lt;/div%26gt;
 
%26lt;script type="text/html" id="person-template"%26gt;
    %26lt;h3 data-bind="text: name"%26gt;%26lt;/h3%26gt;
    %26lt;p%26gt;Credits: %26lt;span data-bind="text: credits"%26gt;%26lt;/span%26gt;%26lt;/p%26gt;
%26lt;/script%26gt;
 
 function MyViewModel() {
     this.people = [
         { name: 'Franklin', credits: 250 },
         { name: 'Mario', credits: 5800 }
     ]
 }
 ko.applyBindings(new MyViewModel());

其实它和普通的绑定没什么太大差别就等同于下面的绑定

%26lt;div data-bind="foreach: people"%26gt;
    %26lt;h3 data-bind="text: name"%26gt;%26lt;/h3%26gt;
    %26lt;p%26gt;Credits: %26lt;span data-bind="text: credits"%26gt;%26lt;/span%26gt;%26lt;/p%26gt;
%26lt;/div%26gt;

在模板绑定中还可以用嵌套的方式来进行绑定,一般来配合多层次的数据结构。并且可以用as 语法来指定模型上下文中 的你要循环绑定的数据字段父级或者子级的别名, 下面给出代码.

%26lt;ul data-bind="template: { name: 'seasonTemplate', foreach: seasons, as: 'season' }"%26gt;%26lt;/ul%26gt;
 
%26lt;script type="text/html" id="seasonTemplate"%26gt;
    %26lt;li%26gt;
        %26lt;strong data-bind="text: name"%26gt;%26lt;/strong%26gt;
        %26lt;ul data-bind="template: { name: 'monthTemplate', foreach: months, as: 'month' }"%26gt;%26lt;/ul%26gt;
    %26lt;/li%26gt;
%26lt;/script%26gt;
 
%26lt;script type="text/html" id="monthTemplate"%26gt;
    %26lt;li%26gt;
        %26lt;span data-bind="text: month"%26gt;%26lt;/span%26gt;
        is in
        %26lt;span data-bind="text: season.name"%26gt;%26lt;/span%26gt;
    %26lt;/li%26gt;
%26lt;/script%26gt;
 
%26lt;script%26gt;
    var viewModel = {
        seasons: ko.observableArray([
            { name: 'Spring', months: [ 'March', 'April', 'May' ] },
            { name: 'Summer', months: [ 'June', 'July', 'August' ] },
            { name: 'Autumn', months: [ 'September', 'October', 'November' ] },
            { name: 'Winter', months: [ 'December', 'January', 'February' ] }
        ])
    };
    ko.applyBindings(viewModel);
%26lt;/script%26gt;

基本常用的模型绑定的方式已经给出了。还有几种特殊的但是不常用的比如 %26nbsp;afterRender ,afteradd ,beforeremove绑定等等这些并不常用,有想了解的朋友可以参考官方文档%26nbsp;http://knockoutjs.com/documentation/template-binding.html%26nbsp;%26nbsp;

%26nbsp;

文章的最后在介绍一下 ko 里面mapping插件的使用。

这个插件用起来非常简单。

下面给个例子

在普通的绑定中我们会这样做。先给出普通绑定的代码.

先创建模型绑定模型

var viewModel = {
    serverTime: ko.observable(),
    numUsers: ko.observable()
}
    ko.applyBindings(viewModel);
%26nbsp;

绑定dom

The time on the server is: %26lt;span data-bind='text: serverTime'%26gt;%26lt;/span%26gt;
and %26lt;span data-bind='text: numUsers'%26gt;%26lt;/span%26gt; user(s) are connected.

异步或者同步获取数据

var data = getDataUsingAjax();          // 从服务器获取数据
//假如返回的数据格式如下
{
%26nbsp;%26nbsp;%26nbsp;%26nbsp; serverTime: '2010-01-07' ,
%26nbsp;%26nbsp;%26nbsp;%26nbsp; numUsers: 3
}
%26nbsp;

%26nbsp;

那么我们只要这样把数据填充到模型里面就完成了

// 填充模型
viewModel.serverTime(data.serverTime);
viewModel.numUsers(data.numUsers);

%26nbsp;

那么我们在是用ko.mapping插件的时候怎么操作呢?先介绍mapping 插件是干什么的,简单来说就是用来模型转换的。可以把js对象和json对象互相转换。

下面给出代码示例:

var viewModel = ko.mapping.fromJS(data);//data可以是空的js对象 这样可以创建一个vm模型
// data是从服务器接收到的数据
ko.mapping.fromJS(data, viewModel);//更新模型数据
var unmapped = ko.mapping.toJS(viewModel);//模型转换为js对象

那么我们如何使用它来绑定数据呢假设有这样一个json对象

var data = {
    name: 'Scot',
    children: [
        { id : 1, name : 'Alicw' }
    ]
}

我们可以通过它来创建一个viewmodel对象

var viewModel = ko.mapping.fromJS(data);

当有新的数据是我们可以这样来更新数据模型

var data = {
    name: 'Scott',
    children: [
        { id : 1, name : 'Alice' }
    ]
}
ko.mapping.fromJS(data, viewModel);//更新模型

当然。你也可以创建一个vm模型然后用mapping来更新你模型的数据

var data = {
    name: 'Graham',
}
 
var mapping = {
    'name': {
        update: function(options) {
            return options.data + 'foo!';
        }
    }
}
var viewModel = ko.mapping.fromJS(data, mapping);
alert(viewModel.name());

像这样最后输出的结果是%26nbsp;Grahamfoo! mapping插件还有一些其他的语法比如,你想忽略一些js对象的属性不绑定到模型上的话可以这样写。

var mapping = {
    'ignore': ["propertyToIgnore", "alsoIgnoreThis"]
}
var viewModel = ko.mapping.fromJS(data, mapping);

var oldOptions = ko.mapping.defaultOptions().ignore;
ko.mapping.defaultOptions().ignore = ["alwaysIgnoreThis"];

和它对应的是include 语法。你可以单独添加一些属性到js对象里

var mapping = {
    'include': ["propertyToInclude", "alsoIncludeThis"]
}
var viewModel = ko.mapping.fromJS(data, mapping);

var oldOptions = ko.mapping.defaultOptions().include;
ko.mapping.defaultOptions().include = ["alwaysIncludeThis"];

上面已经介绍了大部分的mapping语法了相信大家看完之后呢,应该就能够使用它了。

还有一些细节的东西大家可以去官网查看。mapping 插件下面的地址我也一并给出%26nbsp;http://knockoutjs.com/documentation/plugins-mapping.html

到这里。关于ko的系列简单入门教程就算是告一段落了。谢谢代价的阅读。如有疑问可以给我留言。

%26nbsp;

菜鸟扣图之KnockOut 2.0,我也是高手 立即下载

相关推荐

knockout抠图实例指南 knockout抠图实例

本教程共分五课,通过本教程,你可以学会如何使用功力无比的蒙板工具COREL KNOCKOUT,把有细节边缘的(如羽毛,动物皮毛,阴影,头发,烟雾,透明体等)前景对象从背景中"抠"出来,并应用到另一个特定的背景图像中.

菜鸟扣图之KnockOut 2.0 (二)

在上一篇文章《Photoshop抠图专家:KnockOut外挂滤镜(一)》中,我们介绍了KnockOut 2.0的界面组成和常规抠图方法。今天继续介绍其他抠图方法,比如如何抠取透明物体、如何抠图物体的阴影、如何对抠图的边缘缺陷进行修补、如何羽化抠图边缘的缺陷等方法,希望读者能够熟练掌握这些方法并能够综合运用。   三、抠取透明物体   使用Photoshop抠取透明物体是一个很复杂过程,常见的方

php菜鸟技术天地 1565

KnockoutJs中文教程

纯html页面教程,我自己收集的,我也是从这个教程中,慢慢学会的,有啥不懂的可以联系我!

Knockout-Postbox 使用指南

Knockout-Postbox 使用指南 1. 项目介绍 Knockout-Postbox 是一个轻量级的库,专为 Knockout.js 设计,旨在利用 Knockout 的原生发布/订阅(pub/sub)功能来促进独立视图模型间的解耦通信。这意味着你可以构建组件或视图模型,使它们能够相互通信而不必直接引用对方,从而增强应用的模块化和可维护性。此项目遵循 MIT 开源许可协议。 2. 项目快速...

gitblog_00743的博客 758

MitoZ|动物线粒体基因组组装注释软件

一、MitoZ是什么 是基于python3开发的可以自动过滤双端测序的原始数据、mt基因组组装、mt基因组注释以及mt基因组可视化的工具。 官方的说明文档地址:https://gitee.com/CHANyp/MitoZ#citation 二、MitoZ的安装 git clone https://gitee.com/CHANyp/MitoZ.git cd MitoZ/version_2.4-alpha tar -jxvf release_MitoZ_v2.4-alpha.tar.bz2 三、运行Mito

qq_50637636的博客 1万+

光伏逆变器在环测试解决方案

光伏行业是利用太阳能光辐射将其转化为可用电能的行业。近年来,为应对气候变化和能源安全等挑战,全球对清洁能源的需求不断增长。太阳能作为最具潜力和可再生的能源之一,被视为替代传统化石能源的重要选择,光伏行业因此得到了迅猛发展,并在全球范围内得到了广泛应用。许多国家和地区都将光伏技术作为关键的能源发展方向。尤其是在新兴和发展中国家,光伏发电具有巨大的增长潜力,将成为未来市场竞争的重点。随着规模化生产的推进,光伏组件的制造成本不断降低。

shiwei0813的博客 962

Knockout学习教程

Knockout介绍 Knockout.js是什么?Knockout是一款很优秀的JavaScript库,它可以帮助你仅使用一个清晰整洁的底层数据模型(data model)即可创建一个富文本且具有良好的显示和编辑功能的用户界面。任何时候你的局部UI内容需要自动更新(... 下载与安装 Knockout的核心类库是纯JavaScript代码实现的,不依赖任何其他类库,所以按照如下步骤即...

我想我是海 冬天的大海 心情随风轻摆 1860

Ollama安装教程

Ollama 是一个开源的大语言模型(LLM)部署工具,专为在本地机器部署和运行大模型而设计,通过简单的命令就可以在本地快速运行大模型(如DeepSeek、Llama、Gemma、QWQ等)。非常适合开发者、研究人员以及对数据安全和隐私有较高要求的企业和用户

学习AI应用开发,分享AI干货、获取最新AI咨询 3865

knockout简单实用教程2

在上一篇文章中简单了介绍了下什么ko(后文中都已ko来代替knockout.js)和一些简单的ko的使用方法下面我将介绍在实际的项目中常用到的几种绑定方式和方法. 在开始之前先拿一个dome来回顾下ko的绑定方式吧。废话不多说上代码。 var BetterListModel = function () { this.itemToAdd = ko.observable("...

S447273956的博客 307

智能车竞赛必备:STC32G144K开源库实战指南(含总钻风摄像头配置)

本文为智能车竞赛参赛者提供了一份基于STC32G144K微控制器与逐飞开源库的实战开发指南。文章详细介绍了从开发环境搭建、总钻风摄像头驱动配置与图像采集优化,到核心控制算法实现与多任务调度等关键步骤,旨在帮助队伍快速构建稳定高效的视觉处理系统,提升竞赛竞争力。

weixin_29191081的博客 717

YOLOv11【第一章:零基础入门篇·第10节】YOLOv11项目实战:从零搭建检测系统!

🏆 本文收录于专栏 《YOLOv11实战:从入门到深度优化》。本专栏围绕 YOLOv11 的改进、训练、部署与工程优化 展开,系统梳理并复现当前主流的 YOLOv11 实战案例与优化方案,内容目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。

**My Coding Family** 5772

knockout 简单使用

定义: var QcViewModel = function () { var self = this; self.name = ko.observable(); self.qty = ko.observable(); }; var RecordviewModel =function() { ...

aynbxl8574的博客 176

STM32实战开发(65):STM32摄像头图像采集开发教程

我们将会详细介绍如何使用STM32进行摄像头控制、图像数据采集以及如何将采集到的图像数据传输到其他设备进行处理。通过这篇博客,您将能够掌握STM32与摄像头模块的图像采集技术,应用于各种图像处理场景。为了确保STM32能够正确接收图像数据,我们需要配置STM32的GPIO引脚,并通过外部中断捕获这些信号。为了实现更高效的图像采集,可以通过DMA进行数据传输,将图像数据直接从GPIO引脚存储到内存中。通过DMA传输,我们可以将采集到的图像数据直接存储在内存中的一个缓冲区,然后进行后续的图像处理。

2201_76125393的博客 2540

Knockout-jQueryUI 使用指南

Knockout-jQueryUI 使用指南 项目介绍 Knockout-jQueryUI 是一个专为 Knockout.js 框架设计的绑定库,它将 jQuery UI 的丰富交互组件与 Knockout.js 的响应式编程模型无缝对接。这个项目由 Vas Gábor 开发并采用 MIT 许可证发布,旨在简化在 Knockout 应用中集成 jQuery UI 控件的过程,提供轻量级(9kb/3...

gitblog_00637的博客 1147

【Flink】FlinkSQL如何触发执行计算

Table (通过 StatementSet.addInsert() 输出给某个 Sink)和 INSERT 语句 (通过调用 StatementSet.addInsertSql())会先被缓存到 StatementSet 中,StatementSet.execute() 方法被调用时,所有的 sink 会被优化成一张有向无环图。该方法是用来将一个表的内容插入到目标表中,一旦该方法被调用, TABLE API 程序立即被翻译。该方法是用来执行一个 SQL 语句,一旦该方法被调用, SQL 语句立即被翻译。

一杯咖啡半杯糖的博客 1007

【红外技术】DDE算法:HE在红外图像可视化上的应用(附源码)

并且数据一般是以 8 的整数倍的位宽在电子系统中应用,因此大多数的显示器的显示位宽为 8bit,共 256 个灰阶。为了使红外图像可视化,因此需要一种“数据压缩”技术,还需要既可能的不丢失原始图像信息。HE后的图像直方图分布比较均匀离散,图像对比度好。但是HE算法只是适用某些图像,它是将灰度集中区域进行拉伸得到,也会放大该集中区域的噪声,它是一种“不公平”的映射。以下是红外细节增强算法的演示,很明显右边的图像,展现了更多的图像细节,对于小目标的观测非常友好。文章已于2019-12-02修改。

sunwindl91181的博客 911

knockout简介

knockout简介

wnbwl的博客 3093

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

Knockout.js入门级

Knockout.js入门级 一、简单介绍 a.knockoutjs是什么? b.为什么使用它? c.主要特性 二、基本语法 a.knockout.js引入 b.声明 c.激活 d.绑定 三、开发应用 a.初始化模型 b.定义form表单数据对象 c.定义事件 四、核心总结 Knockout.js入门级 一、简单介绍 a.knockoutjs是什么? ...

u014344668的专栏 9083

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

了解KnockOut.js

Knockout是微软出品,是MVVM模型领域内的先驱,使用函数偷龙转凤,最短编辑长度算法实现DOM的同步,兼容IE6。 Knockout是一个JS的MVVM模式的实现,Knockout是建立在3个核心功能之上: 属性监控与依赖追踪 声明式绑定 模板机制 MVVM MVVM是微软WPF结合发展演变的一种新型的架构框架。 MVVM设计模式的优点 低耦合 Model的修改不会影响视图的展现,ViewModel可绑定不同的View,当View变化时Model可以不变,当Model变..

汉堡请不要欺负面条 964

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Knockout.js 体验之旅

作者:起步科技前端研究员小茄,专注分享HTML5 App快速开发工具 WeX5 的黑魔法以及各种有趣炫酷的前端技术。 前言什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular、React啊,再不赶紧的话,他们也要变out了哦。身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包,却依然振振有词地喋喋不休,一脸真诚。是啊,前端发展太快,那边前几年出的框架已是无人问

WeX5开发工具 1万+
上一篇: 2014年新一代的报表利器 Qlik Sense Desktop 初步体验
下一篇: CSRF攻击与防御
lin91o7c
博客等级 码龄12年 1粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值