2013-12-18 103 views
0

我有我的模板包含像這樣雖然我在瀏覽器中出現錯誤,如下所示。如果我將輸入和按鈕移動到模板外部,但我不明白爲什麼。任何人都可以建議,因爲我是淘汰賽的新手。謝謝,解析錯誤Knockout和模板

<div data-bind="template: { name: 'keyword-template', data: Article }"></div> 

該模板具有以下標記。

更新

<script type="text/html" id="keyword-template"> 
    <div> 

    <table class="KeywordList" data-bind="foreach: Keywords"> 
    <tr> 
     <td data-bind="text: $data"> 
     </td> 
     <td data-bind="click: $root.delete"> 
     </td> 
    </tr> 
    </table> 

    <input data-bind="value: toAdd" /> 
    <button data-bind="click: add">Add</button>  

    </div>        
</script> 

當運行在瀏覽器中出現以下錯誤

錯誤

錯誤驗證碼:錯誤:無法解析綁定。 消息:ReferenceError:add沒有定義; 綁定值:點擊:添加 源文件:/js/libs/knockout-2.2.0.js 線:57

更新:使用Javascript包括

window.helper = { 
Start: function (tagging) { 
    var viewModel = helper.viewModel(tagging); 
    window.helper.ViewModel = viewModel; 

    viewModel.keywords = ko.observableArray(viewModel.Keywords().split('|')); 
    viewModel.toAdd = ko.observable(); 
    viewModel.add = function() { 
    viewModel.keywords.push(viewModel.toAdd()); 
    } 
}; 

回答

0

我不知道你是否包括所有的JavaScript,但視圖模型應該有一個附加功能,它叫,那是什麼錯誤顯示:

function Article() { 
    var self = this; 
    self.Title = ko.observable(); 
    self.Body = ko.observable(); 

    self.add = function() { 
     // do what is required for the add function here 
    }; 
} 

或者,如果您的加載事件是在這個viewmodel以上的水平,那麼你需要改變你的按鈕爲:

<button data-bind="click: $parent.add">Add</button> 
+0

我已更新我的問題以包含js –

0

我的猜測是,這個模板在foreach循環中使用,但「添加」功能是在視圖模型的根目錄中定義的?在「foreach」綁定中,數據綁定的上下文是迭代的單個元素。你需要綁定到「$ parent.add」或甚至「$ root.add」。

查看Knockout documentation on the binding context瞭解更多信息。

+0

我已經更新了我的問題作爲你的位置。 –

+0

您正在將您的視圖綁定到您的視圖模型,因此您需要在視圖模型中包含添加和其他功能 –