我很擅长淘汰并试图理解一些绑定应该如何工作。
我认为我可以在正常的绑定中引用一个可观察的孩子,而不需要使用但是我不能让它工作。
我的模型和视图模型是;
Model = function(name) {
this.name = ko.observable(name);
};
ViewModel = function () {
var list = ko.observableArray([new Model("Apple"), new Model("Pear")]),
selectedItem = ko.observable();
function selectItem(item) {
selectedItem(item);
}
return {
list: list,
selectedItem: selectedItem,
selectItem: selectItem
};
};
以下是绑定:
<div id="content">
<ul id="list" data-bind="foreach: list">
<li data-bind="text: name, click: $parent.selectItem"></li>
</ul>
</div>
<p>Will show selected item</p>
<div data-bind="with: selectedItem">
<span data-bind="text: name"></span>
</div>
<div>
<p>Won't show selected item</p>
<span data-bind="text: selectedItem().name()"></span>
</div>
或者,工作fiddle就在这里。
据我所知,我应该能够看到selectedItem().name
的值,但是apply绑定会抛出错误,但是如果div具有with: selectedItem
绑定,则它可以正常工作。
我是否没有optin但是在这种情况下使用with
绑定?
答案 0 :(得分:2)
设置绑定上下文旁边的with
弯曲也处理值为null
或undefinied
的情况。
如果您提供的表达式评估为
null
或undefined
,则后代元素将不会被绑定,而是会从文档中删除。
如果您不想使用with
,则必须手动处理null
或undefinied
案例&#34;&#34;因此,如果name()
返回了某些内容,则只能致电selectedItem()
。
可以使用语句selectedItem() && selectedItem().name()
完成此操作。 (null
,空字符串和undefinied
评估为false
,其余为true
。)
所以以下绑定正在起作用:
<span data-bind="text: selectedItem() && selectedItem().name()"></span>