实例化对象的多个实例并推送到ko.observableArray

时间:2013-02-22 23:20:28

标签: 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 "persons" in "people" will be "Tina" and "Bob" is nowhere

这是Person对象(在coffeescript中)

define (require) =>
    class Person
        constructor: (name, title)-> 
            @name name
            @title title

        name: ko.observable()
        title: ko.observable()

创建此输出:

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;

  })();
});

1 个答案:

答案 0 :(得分:4)

问题是您正在制作nametitle类级别属性,而不是在实例级别。因此,您有效地让每个Person实例共享相同的名称和标题可观察对象。

要创建实例属性,您需要在其中设置构造函数。

class Person
    constructor: (name, title) ->
        @name = ko.observable name
        @title = ko.observable title