敲定变量未定义 - 范围问题?

时间:2013-03-23 21:31:39

标签: javascript knockout.js

我有以下代码:

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()未定义。我试图让视图实时显示子数组的长度,因此当用户添加/删除项时,计数会更新。知道为什么这不起作用吗?

1 个答案:

答案 0 :(得分: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;
});