我是否必须使用带有绑定的淘汰赛?

时间:2013-05-02 17:35:55

标签: knockout.js knockout-2.0

我很擅长淘汰并试图理解一些绑定应该如何工作。

我认为我可以在正常的绑定中引用一个可观察的孩子,而不需要使用但是我不能让它工作。

我的模型和视图模型是;

        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绑定?

1 个答案:

答案 0 :(得分:2)

设置绑定上下文旁边的with弯曲也处理值为nullundefinied的情况。

来自documentation

  

如果您提供的表达式评估为nullundefined ,则后代元素将不会被绑定,而是会从文档中删除。

如果您不想使用with,则必须手动处理nullundefinied案例&#34;&#34;因此,如果name()返回了某些内容,则只能致电selectedItem()

可以使用语句selectedItem() && selectedItem().name()完成此操作。 (null,空字符串和undefinied评估为false,其余为true。)

所以以下绑定正在起作用:

<span data-bind="text: selectedItem() && selectedItem().name()"></span>

演示JSFiddle.