Binding context
binding context是一个保存数据的对象,你可以在你的绑定中引用它。当应用绑定的时候,knockout自动创建和管理binding context的继承关系。这种层次结构的根引用你指定的viewModel参数(ko.applyBindings(viewModel)
)。
然后每次使用一个控制流如with或者foreach 来创建一个子节点binding context引用嵌套的viewModel data。
$parent
<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>
$parents
这是一个数组,代表了所有的父节点view models
$parent[0] : 代表父节点;
$parent[1] : 代表祖父节点;
$parent[1] : 代表曾祖父节点;
.....以此类推
$root
它是root context的根节点视图模型对象,一般是通过ko.applyBindings指定的,相当于$parents[$parents.length - 1]。
$component
如果你在一个特定的组件模板的上下文中,$component指定的是那个component,它的指定组件相当于$root,在嵌套的组件情况下,它代表了最邻近的一个组件。
$data
它代表了当前上下文中的viewModel对象,$data和$root是相当的。在嵌套的binding context中,这个参数将设置到当前的数据项。
$data是非常有用的,例如,当你想引用viewModel本身而不是viewModel的属性的时候。
<ul data-bind="foreach: ['cats', 'dogs', 'fish']">
<li>The value is <span data-bind="text: $data"></span></li>
</ul>
$index(仅在foreach binding中可用)
它是一个在foreach绑定中的数组的从0开始的索引条目。不想其他的context属性,$index是observable的,即会随着数组item的更新而更新。
$parentContext
指定了父节点级别的binding context对象,与$parent不同的是,它是在父节点中指定数据而不是binding context。
$rowData
它是在当前上下文中,原viewModel的值,通常它相当于$data,但是,如果viewModel被ko以observable来修饰,$data是unobservable的,而$rowData是observable的。