单击的Knockout错误

时间:2014-01-19 08:56:29

标签: knockout.js

我是淘汰赛的初学者,在做样本时我在尝试浏览我的页面时收到错误消息。

  

0x800a1391 - JavaScript运行时错误:ItemToEdit未定义

下面是我的代码:

 $(function () {
     countries = [{
         name: France
     }, {
         name: Germany
     }, {
         name: Spain
     }];

     var viewmodel = {
         table: ko.observableArray(countries),
         ItemToEdit: function () {
             var editedItem = ko.dataFor(this);
         },
     };
 });

我的HTML:

<a href="#" data-bind="click :ItemToEdit">Edit</a>

3 个答案:

答案 0 :(得分:1)

您没有调用applyBindings,它将您的视图模型绑定到html。创建vm后添加以下行:

ko.applyBindings(viewmodel);

答案 1 :(得分:1)

如果您在table绑定等中迭代foreach,那么ItemToEdit将不会出现在您当前的上下文中,而是它的父上下文(在这种情况下是也是根上下文)而不是。因此,您必须符合条件:

<a href="#" data-bind="click : $parent.ItemToEdit">Edit</a>

<a href="#" data-bind="click :$root.ItemToEdit">Edit</a>

答案 2 :(得分:0)

就像Artem所说,你需要在你粘贴的功能中调用ko.applyBindings(viewmodel);

 $(function () {
     countries = [{
         name: France
     }, {
         name: Germany
     }, {
         name: Spain
     }];

     var viewmodel = {
         table: ko.observableArray(countries),
         ItemToEdit: function () {
             var editedItem = ko.dataFor(this);
         },
     };
     ko.applyBindings(viewmodel);
 });

你可能在该函数之外的某个地方调用applyBindings,这意味着找不到viewmodel