我目前正在使用Ember.js中的对象模型。我真的很喜欢它,但有一件事让我感到困惑。
这有效(http://emberjs.jsbin.com/jepazo/1/edit?html,css,js,console,output):
App.Car = Ember.Object.extend({
color: 'red',
brand: "Tesla",
desciption: function(){
return this.get('color') + this.get('brand');
}.property('color','brand')
})
App.IndexController = Ember.Controller.extend({
zl: [App.Car.create(), App.Car.create({brand: 'BMW'})]
})
但我无法在控制器(http://emberjs.jsbin.com/jepazo/2/edit?html,css,js,console,output)上声明它:
App.IndexController = Ember.Controller.extend({
car: Ember.Object.extend({
color: 'red',
brand: "Tesla",
desciption: function(){
return this.get('color') + this.get('brand');
}.property('color','brand')
}),
zl: [this.get('car').create(), this.get('car').create({brand: 'BMW'})]
)};
有谁知道为什么会这样?
答案 0 :(得分:3)
这是因为数组声明中的“this”是Window对象。
如果将zl转换为返回数组的computedProperty,它将起作用。
类似的东西:
zl: function() {
return [this.get('car').create(), this.get('car').create({ brand: 'BMW'})];
}.property()
这是一个说明问题的jsbin:
http://emberjs.jsbin.com/fudiruduxa/1/edit?html,css,js,output