Knockout.js 实例化一个对象的多个实例并推送到ko.observearray
问题:在创建对象的附加实例并将其添加到数组中时,数组中对象的所有实例都将成为最后添加的对象(我相信我总是在创建一个单例,尽管我并不尝试这样做) 例如:Knockout.js 实例化一个对象的多个实例并推送到ko.observearray,knockout.js,coffeescript,singleton,instantiation,Knockout.js,Coffeescript,Singleton,Instantiation,问题:在创建对象的附加实例并将其添加到数组中时,数组中对象的所有实例都将成为最后添加的对象(我相信我总是在创建一个单例,尽管我并不尝试这样做) 例如: var people = ko.observableArray([]); var Bob = new Person('Bob','supervisor'); var Tina = new Person('Tina','sales lead'); people.push(Bob); people.push(Tina); //Both "per
var people = ko.observableArray([]);
var Bob = new Person('Bob','supervisor');
var Tina = new Person('Tina','sales lead');
people.push(Bob);
people.push(Tina);
//Both "persons" in "people" will be "Tina" and "Bob" is nowhere
这是Person对象(在coffeescript中)
创建此输出:
var _this = this;
define(function(require) {
var Person;
return Person = (function() {
function Person(name, title) {
this.name(name);
this.title(title);
}
Person.prototype.name = ko.observable();
Person.prototype.title = ko.observable();
return Person;
})();
});
问题是您正在创建
name
和title
类级属性,而不是在实例级。因此,您可以有效地让每个人实例共享相同的名称和标题
要创建实例属性,需要在其中设置构造函数
class Person
constructor: (name, title) ->
@name = ko.observable name
@title = ko.observable title
问题是您正在创建name
和title
类级属性,而不是在实例级。因此,您可以有效地让每个人实例共享相同的名称和标题
要创建实例属性,需要在其中设置构造函数
class Person
constructor: (name, title) ->
@name = ko.observable name
@title = ko.observable title
我认为这与咖啡脚本无关。我怀疑您没有正确使用knockout.js。这在普通的咖啡脚本中效果很好:。你是对的,亚历克斯,我明白了。我需要深入研究一下击倒球的那只耳环,看看那是不是罪魁祸首。谢谢。当我把“名称”和“标题”改为普通变量而不是“可观察的”时,一切都很好。很有意思。我觉得这和咖啡脚本无关。我怀疑您没有正确使用knockout.js。这在普通的咖啡脚本中效果很好:。你是对的,亚历克斯,我明白了。我需要深入研究一下击倒球的那只耳环,看看那是不是罪魁祸首。谢谢。当我把“名称”和“标题”改为普通变量而不是“可观察的”时,一切都很好。非常有趣。