ember数组持有全局状态?

时间:2015-01-25 06:46:04

标签: ember.js

我正在尝试做一些我认为应该简单易行的事情。我有两个模特,人和工作。一个人有很多工作。我没有使用ember数据,所以我只是扩展Ember.Object来创建Person和Job“类”。我正在使用一个普通的'ol阵列来保住这个人的工作。

如果我创建两个人并且我为每个人添加一个不同的Job,当我渲染他们的工作时,他们都有相同的工作。我不知道为什么或这样做的正确方法是什么。

See this fiddle.

App.Person = Ember.Object.extend({
  name: null,
  jobs: []
});

App.Job = Ember.Object.extend({
  name: null
});

App.IndexRoute = Ember.Route.extend({
  model: function() {
    var john = App.Person.create({name: "John Doe"});
    var rake = App.Job.create({name: "Rake leaves."});
    john.get('jobs').pushObject(rake);

    var jane = App.Person.create({name: "Jane Doe"});
    var washCar = App.Job.create({name: "Wash car."});
    jane.get('jobs').pushObject(washCar);

    // For some reason both john and jane have the same two jobs now. 
    // They should have one each.

    return [john, jane];
  }
});

1 个答案:

答案 0 :(得分:1)

数组在类的不同实例之间是静态的。您需要在实例创建时将新数组设置为属性值。

在Ember中,对象属性初始化仅对每个类定义运行一次。要解决这个问题,您必须将默认值初始化移动到init方法中,或者只是为每个实例重新定义整个数组。

App.Person = Ember.Object.extend({
  name: null,
  jobs: null,
  setup: function() {
    this.set('jobs', []);
  }.on('init')
});

Here is the working bin.