2013-03-23 57 views
0

我有以下代码:敲除变量未定义 - 范围问题?

var ObjectViewModel = function (testObject) { 
    //debugger; 
    var self = this; 
    self.id = testSet.id; 
    self.details = testOject.details; 
    self.children = ko.observableArray(testObject.children); 
    self.childCount = ko.computed(function() { 
     return self.children().length; 
    }); 

    self.addObject = function() { 
     //debugger; 
     // Pending UI 
     // Call API here 
     // On success, complete 
     self.children.push(dummyObject); 
     self.childToAdd(""); 
    }.bind(self); 
    } 
    /etc 

然而在childCount,this.children()是未定义的。我试图让视图实时显示children数组的长度,因此当用户添加/移除项目时,计数会被更新。任何想法为什么这不起作用?

回答

2

你可以通过当函数执行与最后一个参数计算功能的this值应该是什么:

this.childCount = ko.computed(function() { 
    return this.children().length; 
}, this); 

你也可以参考存储this外计算的:

var self = this; 
this.childCount = ko.computed(function() { 
    return self.children().length; 
}); 
+0

谢谢安德鲁。当我这样做时,childCount总是返回0,并且在数组更改时不更新。 “计算”的用法在那里看起来好吗? – JakeP 2013-03-23 21:38:29

+0

@JakeP:看起来对我来说很好 - 你如何向可观察数组添加和移除项目? – 2013-03-23 21:40:26

+0

我刚刚使用add方法更新了我的代码:) – JakeP 2013-03-23 21:42:11