2013-04-05 50 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