【问题标题】:Unable to parse bindings. knockout error无法解析绑定。敲除错误
【发布时间】:2013-04-05 18:27:00
【问题描述】:

这是我学习 Knockout 的第二天。

尝试为按钮单击附加“deleteItem”。它给出了以下错误。

错误

未捕获的错误:无法解析绑定。
消息:ReferenceError:deleteItem 未定义;绑定值:点击:deleteItem

JavaScript:

$(function () {
    var defaultData = [{
        id: 1,
        item: "Todo 1"
    }, {
        id: 2,
        item: "Todo 2"
    }, {
        id: 3,
        item: "Todo 3"
    }];
    var viewModel = {
        listItem: ko.observableArray(defaultData),
        addItem: function () {
            // Add new item
            var id = this.listItem().length + 1;
            this.listItem.push({
                id: id,
                item: "Todo " + id
            });
        },
        deleteItem: function () {
            alert(this);
        }
    }
    ko.applyBindings(viewModel, main);
});

HTML:

<div id="main">
    <button data-bind="click: addItem">+ Add Item</button>
    <div data-bind="foreach: listItem">
        <input type="text" data-bind="value: item" />
        <input type="button" data-bind="click: deleteItem" />
        <br />
    </div>
</div>

【问题讨论】:

    标签: knockout.js


    【解决方案1】:

    函数deleteItem 在您的视图模型上。当您在foreach 中进行绑定时,绑定操作的上下文是listItem 数组中的单个item。您需要绑定到$root.deleteItem 才能引用根视图模型。

    【讨论】:

    • 我推荐使用$parent.deleteItem,这样你就只会升一级。 $root 可能并不总是准确的。
    • @srieen -- 太棒了!请参阅 Tyrsius 的评论。上下文很重要。另外,不要忘记将答案标记为已接受的答案。
    猜你喜欢
    • 2013-02-06
    • 1970-01-01
    • 2012-07-20
    • 2015-12-06
    • 2015-11-14
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多