ember 保存全局状态的数组?

ember arrays holding global state?

我正在尝试做一些我认为应该非常简单的事情。我有两个模型,Person 和 Job。一个人有很多工作。我没有使用 ember 数据,所以我只是扩展 Ember.Object 来创建个人和工作 "classes"。我只是使用一个普通的 'ol 数组来保存此人的工作。

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

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];
  }
});

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

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

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

Here is the working bin.