2013-04-05 44 views
2

这是我第2天的学习淘汰赛。无法解析绑定。淘汰赛错误

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

Error

Uncaught Error: Unable to parse bindings.
Message: ReferenceError: deleteItem is not defined; Bindings value: click: 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> 

回答

7

功能deleteItem是您的视图模型。当绑定在foreach内时,绑定操作的上下文是listItem阵列中的单个item。您需要绑定到$root.deleteItem以引用根视图模型。

+0

谢谢帕特里克!有效。 – srieen 2013-04-05 19:12:18

+0

我建议使用'$ parent.deleteItem',这样你只能增加一个级别。 '$ root'可能并不总是准确的。 – Tyrsius 2013-04-05 19:12:35

+1

@srieen - 太棒了!请参阅Tyrsius的评论。上下文很重要。另外,不要忘记将答案标记为已接受的答案。 – PatrickSteele 2013-04-05 19:19:23