KnockoutJS(3)-绑定语法
绑定语法大致分为2种:
1. 数据绑定(data-bind syntax)
2. 绑定上下文(Binding Context)
下面针对这2中绑定语法分别介绍一下
1. 绑定上下文(Binding Context)
一个绑定语法由两部分组成:绑定的名字和值,他们之间使用“:”进行隔开。
Today's message is: <span data-bind="text: myMessage"></span>
一个标签中我们可以使用多个绑定(多个绑定之间可以相关也可以不相关),此时这些绑定之间使用","进行隔开,比如:
<!-- related bindings: valueUpdate is a parameter for value -->
Your value: <input data-bind="value: someValue, valueUpdate: 'afterkeydown'" /> <!-- unrelated bindings -->
Cellphone: <input data-bind="value: cellphoneNumber, enable: hasCellphone" />
绑定语法中的值可以是单个值,也可以是一个变量,也可以是一段文字,同时也可以是一段JavaScript代码,下面的这个例子展现的就是绑定语法中值得多样性:
<!-- variable (usually a property of the current view model -->
<div data-bind="visible: shouldShowMessage">...</div> <!-- comparison and conditional -->
The item is <span data-bind="text: price() > 50 ? 'expensive' : 'cheap'"></span>. <!-- function call and comparison -->
<button data-bind="enable: parseAreaCode(cellphoneNumber()) != '555'">...</button> <!-- function expression -->
<div data-bind="click: function (data) { myFunction('param1', data) }">...</div> <!-- object literal (with unquoted and quoted property names) -->
<div data-bind="with: {emotion: 'happy', 'facial-expression': 'smile'}">...</div>
如果我们在一个标签中绑定多个元素时,这些元素之间会互相影响的,此时我们在使用的时候要注意以下两点:
(1)、绑定执行的顺序是从左向右的。
(2)、当Model层的数据改变是,绑定到同一个标签上的值都会改变。
2. 绑定上下文(Binding Context)
一个Binding Context是一个对象,在他们中保存着数据,这些数据我们又可以在我们的绑定语法中去使用。当我们使用属性绑定时,Knockoutjs会自动的创建和管理具有等级之分的Binding Context。当我们使用ko.applyBindings(viewModel)的时候,Knockoutjs就会创建root等级指向viewModel的参数。接着,如果你使用了with或者foreach时,Knockoutjs就会创建child binding context指向嵌套的View Model Data。Binding Context为我们提供了以下的属性可供我们在绑定语法中任意使用。
(1)、$parent
这个视图模型对象代表了他的父上下文,代表当前上下文的外部。在root context中,此属性还没有进行定义。例如:
<h1 data-bind="text: name"></h1> <div data-bind="with: manager">
<!-- Now we're inside a nested binding context -->
<span data-bind="text: name"></span> is the
manager of <span data-bind="text: $parent.name"></span>
</div>
(2)、$parents
此属性代表了所有的parent属性。
$parents[0]:代表的是上一个View Model,和$parent相同
$parents[1]:代表的是上上一个View Model
$parents[2]:代表的是上上上一个View Model
这样依次往下推就行了。
(3)、$root
这个是最重要的view model object在root context中,是最上层的parent content,我们也可以使用$parents[$parents.length-1]替换。
(4)、$data
代表当前的view model,如果此时在根部的话,则$data和$root是相等的。如果你不想引用一个view model的属性而想引用一个view model本身时,
$data则是非常有用的:
<ul data-bind="foreach: ['cats', 'dogs', 'fish']">
<li>The value is <span data-bind="text: $data"></span></li>
</ul>
(5)、$index
此属性只在foreach标签中有用,他的值是从0开始的。
(6)、$parentContext
此标签和$parent是有区别的,$parent代表的是上层的view model,$parentContext代表的是上层的具体的数据,比如引用上层的index,使用$parentContext.$index。
下面的两个标签在属性绑定时也是可以使用的,但他们并不是binding context中的一员。
(1)、$context:指向当前的binding context object
(2)、$element
这是当前属性绑定的DOM对象,如果我们想要引用当前标签的属性值的时候我们则可以使用此属性。
<div id="item1" data-bind="text: $element.id"></div>
KnockoutJS(3)-绑定语法的更多相关文章
- KnockJs 绑定语法
按照汤姆大叔的教程,学习了KnockJs相关知识,练习一下KnockoutJs的绑定语法. 相关的教程大家可以去看 汤姆大叔的博客. 练习代码下载 由于没有环境,代码直接用记事本写的,可能比较乱,仅作 ...
- KnockoutJS 3.X API 第四章(14) 绑定语法细节
data-bind绑定语法 Knockout的声明性绑定系统提供了一种简洁而强大的方法来将数据链接到UI. 绑定到简单的数据属性或使用单个绑定通常是容易和明显的. 对于更复杂的绑定,它有助于更好地了解 ...
- Knockout应用开发指南 第三章:绑定语法(3)
原文:Knockout应用开发指南 第三章:绑定语法(3) 12 value 绑定 目的 value绑定是关联DOM元素的值到view model的属性上.主要是用在表单控件<input&g ...
- Knockout应用开发指南 第三章:绑定语法(2)
原文:Knockout应用开发指南 第三章:绑定语法(2) 7 click 绑定 目的 click绑定在DOM元素上添加事件句柄以便元素被点击的时候执行定义的JavaScript 函数.大部分是用 ...
- Knockout应用开发指南 第三章:绑定语法(1)
原文:Knockout应用开发指南 第三章:绑定语法(1) 第三章所有代码都需要启用KO的ko.applyBindings(viewModel);功能,才能使代码生效,为了节约篇幅,所有例子均省略了此 ...
- KnockoutJS 3.X API 第五章 高级应用(5) 使用预处理扩展Knockout绑定语法
注意:这是一种高级技术,通常仅在创建可重用绑定或扩展语法的库时使用. 这不是你通常需要做的时候使用Knockout构建应用程序. 从Knockout 3.0开始,开发人员可以通过提供在绑定过程中重写D ...
- knockoutjs -- if 绑定
参考:http://knockoutjs.com/documentation/if-binding.html If 绑定用来控制一部分html标签是否生成在DOM树中(html标签有data-bind ...
- knockoutjs with绑定导致unobtrusive validation失效的问题
如果最初的时候with绑定的对象是空的,那么with绑定内部的unobtrusive validation规则在提交的时候无法生效,无法进行验证. 解决办法: 在提交的时候(或者with绑定的对象非空 ...
- 【Vue.js】vue基础: 3种Class和Style绑定语法
凡是用到了v-bind,那就一定有变量的存在,下面是三种语法的展示: 1. 对象语法: v-bind:class="{active: isActive, 'text-danger': has ...
随机推荐
- php版DES
class DES { var $key; var $iv; //偏移量 function DES( $key, $iv=0 ) { //key长度8例如:1234abcd $this->key ...
- java_SSH整合1
Domain: public class Department { private Long id; private Set<User> users = new HashSet<Us ...
- css 设置全屏背景图片
<div id="div1"><img src="img.jpg" /></div> div#div1{ position: ...
- myeclipse2014如何添加源码反编译工具插件
Eclipse下的Java反编译插件:Eclipse Class Decompiler,整合了目前最好的2个Java反编译工具Jad和JD-Core,并且和Eclipse Class Viewer无缝 ...
- yii2.0的gii生成代码bug
自动生成代码真的很好用,能减少很多基础代码的编写,如果这些基础代码一个个手动去敲,即枯燥乏味,还容易出错(话说人类真的不适合做单调重复的工作),yii框架的gii自动生成代码工具就能减少很多工作量.前 ...
- poj 2553 强连通分支与缩点
思路:将所有强连通分支找出来,并进行缩点,然后找其中所有出度为0的连通分支,就是题目要求的. #include<iostream> #include<cstdio> #incl ...
- Delphi2009下编译提示“无法找到“Excel_TLB”
这是没有安装Excel组件导致的,安装Excel组件的步骤是: 1.新建Package工程 2.在Office安装目录下找到文件XL5CHS32.OLB 我的Office版本是2007,XL5CHS3 ...
- CSE(Corrupted State Exceptions) 严重异常处理办法
原因分析 出现这个问题说明.NET版本至少是4.0,因为微软在.NET 4.0版本中更改了异常处理机制.微软认为catch(Exception)这种写法是不负责任的,程序员应该按照异常严重类别决定程序 ...
- 锋利的jQuery第2版学习笔记4、5章
第4章,jQuery中的事件和动画 注意:使用的jQuery版本为1.7.1 jQuery中的事件 JavaScript中通常使用window.onload方法,jQuery中使用$(document ...
- 解决Jquery和prototype的兼容问题
1. 引入jquery 时,将jquery库在 prototype之前引入: 2.使用时: jQuery.noConflict(); // 这个要在 之前加上 3.初始化加载 (这里我试过,可以有两 ...