我正在深入了解我的第一个功能应用程序,需要更好地了解我的控制器中发生了什么。
这里我有一个控制器,可以在用户点击“选项”时处理操作。查看this
对象会引发一些问题:
this
?我希望它是我的Option模型的一个实例,但它缺少一些属性(比如“identity:'model:Option'”)。 this
是我的Option模型的一个实例,为什么'model'属性未定义?为什么不知道呢?this.content
?看起来有些东西在content
(id
和isSuppressed
)内,有些则不在(this.isSelected
) - 为什么会这样?免责声明:虽然到目前为止还没有任何问题,但我的ember应用程序架构肯定会出现错误。
屏幕截图调试控制器:
期权模型&控制器
App.Option = Ember.Object.extend({
identity: 'model: Option',
id: '',
cost: '',
isSelected: false,
isSuppressed: false
});
App.OptionController = Ember.Controller.extend({
actions: {
toggleOption: function() {
this.set('isSelected', !this.get('isSelected'));
var id = this.get('content.id');
this.send('deselect', this.get('content.id'));
}
}
});
App.OptionsController = Ember.ArrayController.extend({
actions: {
deselect: function(exception) {
var opts = this.rejectBy('id', exception)
opts.setEach('isSuppressed', true);
}
}
});
答案 0 :(得分:3)
它取决于this
的位置,如果您在控制器中它是控制器。如果您的控制器是ObjectController
/ ArrayController
,它会将get / set调用代理到底层模型。 content
/ model
在控制器的上下文中是相同的。
属性很少直接存在于实例上,通常会隐藏它们以阻止在不使用getter / setter的情况下访问属性。
在上面的代码中,您的OptionController
很可能会延伸ObjectController
。除非控制器没有模型支持。如果您使用Ember.Controller.extend
,那么它不会将getter / setter代理到模型,它将存储,从控制器本身检索属性。