ember 保存全局状态的数组?
ember arrays holding global state?
我正在尝试做一些我认为应该非常简单的事情。我有两个模型,Person 和 Job。一个人有很多工作。我没有使用 ember 数据,所以我只是扩展 Ember.Object 来创建个人和工作 "classes"。我只是使用一个普通的 'ol 数组来保存此人的工作。
如果我创建两个人并为每个人添加不同的工作,当我渲染他们的工作时,他们都有相同的工作。我不知道为什么或这样做的正确方法是什么。
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')
});
我正在尝试做一些我认为应该非常简单的事情。我有两个模型,Person 和 Job。一个人有很多工作。我没有使用 ember 数据,所以我只是扩展 Ember.Object 来创建个人和工作 "classes"。我只是使用一个普通的 'ol 数组来保存此人的工作。
如果我创建两个人并为每个人添加不同的工作,当我渲染他们的工作时,他们都有相同的工作。我不知道为什么或这样做的正确方法是什么。
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')
});