Knockout.js 在敲除中动态创建观察值和计算值
我有一个可观察数组,其中包含对象(动态创建的),这些对象本身具有可观察属性。到目前为止,上帝,但当我尝试向动态创建的对象添加一个计算的可观测值时,对象的可观测值解析为未定义 //对象,其模型具有可观察数组和动态生成对象的实例Knockout.js 在敲除中动态创建观察值和计算值,knockout.js,Knockout.js,我有一个可观察数组,其中包含对象(动态创建的),这些对象本身具有可观察属性。到目前为止,上帝,但当我尝试向动态创建的对象添加一个计算的可观测值时,对象的可观测值解析为未定义 //对象,其模型具有可观察数组和动态生成对象的实例 function SecretSanta(params) { ... ko.applyBindings(new this.Model(this)); }; SecretSanta.prototype = { ... Model: func
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设置为内部函数,它工作正常(但绑定不会得到更新)
有人能指出我做错了什么吗?。先谢谢你
我提供了一个完整代码的链接当您创建计算的观测值时,会立即对其进行评估。创建时,
self.name()
的值未定义。因此,您无法调用undefined的match
一个选项是初始化您的姓名,如下所示:
this.name = ko.observable(name || "");