【发布时间】:2012-12-01 20:15:37
【问题描述】:
我有一个包含对象(动态创建)的可观察数组,这些对象本身具有可观察属性。到目前为止,上帝,但是当我尝试将计算的可观察对象添加到动态创建的对象时,对象的可观察对象解析为未定义。
// 模型具有可观察数组和动态生成对象实例的对象
function SecretSanta(params) {
...
ko.applyBindings(new this.Model(this));
};
SecretSanta.prototype = {
...
Model: function(secretSanta) {
var self = this;
this.secretSanta = secretSanta;
this.newSanta = new Santa();
this.santas = ko.observableArray();
this.addSanta = function() {
self.santas.unshift(new Santa(self.newSanta.getName(), self.newSanta.getEmail()));
self.newSanta.clear();
}
this.removeSanta = function(santa) {
self.santas.splice(self.santas.indexOf(santa), 1);
};
this.santasCount = ko.computed(function() {
return self.santas().length;
});
this.valid = ko.computed(function() {
return self.santasCount() >= self.secretSanta.VALID_SANTAS;
});
}
};
// Dynamically generated objects
function Santa(name, email) {
var self = this;
this.name = ko.observable(name);
this.email = ko.observable(email);
this.valid = ko.computed(function () {
return self.name().match(/\w{3,}/);
});
}
在最后一行代码中,控制台抱怨 self.name() 未定义;如果我摆脱计算的初始化并将 this.valid 设置为内部函数,它工作正常(但绑定没有得到更新)。
谁能指出我做错了什么?提前非常感谢。
我提供了完整代码的链接http://jsfiddle.net/jeAtT/5/
【问题讨论】:
标签: knockout.js