敲除模板中的“添加”按钮会导致错误

时间:2014-01-03 13:39:32

标签: javascript knockout.js knockout-templating

尝试在我的挖空模板中包含一个添加按钮,如下所示,但我收到以下错误。如果我将模板外部的按钮移动到模板下方,它会奇怪地工作..任何想法为什么会发生这种情况? 谢谢,

模板

<script type="text/html" id="mytemplate">   

<table data-bind="foreach: Keywords">
<tr>
  <td data-bind="text: $data"></td>
  <td>
      <a href="#" data-bind="click: $root.delete">Delete</a>
  </td>
</tr>
</table>

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

</script>

标记

@using (Html.BeginForm...)      
{
  <div data-bind="template: { name: 'mytemplate', data: mydata}"></div>
}

错误

Error: Error: Unable to parse bindings.
Message: ReferenceError: toAdd is not defined;
Bindings value: value: toAdd

Javascript(onload)

window.Helper = {
    Start: function (tag) {
        var viewModel = viewModel(tag);
        window.helper.ViewModel = viewModel; 
        viewModel.toAdd = ko.observable();
        viewModel.add = function () {  
            ...
        };
    ko.applyBindings(viewModel);

1 个答案:

答案 0 :(得分:1)

template绑定中,您位于mydata属性的上下文中。

但是,您的toAddadd是在根级别定义的,因此您需要在绑定中使用$root(或$parent,具体取决于嵌套级别)它们:

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

您可以在documentation中阅读更多绑定上下文。