0

問題:オブジェクトの追加インスタンスを作成して配列に追加すると、配列内のオブジェクトのすべてのインスタンスが最後に追加されたオブジェクトになります(私は試みていませんが、常にシングルトンを作成していると思います)。

例:

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;

  })();
});
4

1 に答える 1

4

問題は、インスタンスレベルではなく、クラスレベルのプロパティをname作成していることです。titleしたがって、事実上、すべてPersonのインスタンスが同じ名前とタイトルのオブザーバブルを共有することになります。

インスタンスプロパティを作成するには、コンストラクターを設定する必要があります。

class Person
    constructor: (name, title) ->
        @name = ko.observable name
        @title = ko.observable title
于 2013-02-23T00:46:23.337 に答える