dou*_*ack 6 javascript scope ember.js
我正在深入了解我的第一个功能应用程序,需要更好地了解我的控制器中发生了什么.
在这里,我有一个控制器,当用户点击"选项"时处理动作.看一下这个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);
}
}
});
Run Code Online (Sandbox Code Playgroud)
这取决于在哪里this,如果您在控制器中,那么它就是控制器。如果您的控制器是ObjectController/ ArrayController,它将代理 get/set 调用到底层模型。 content/model在控制器的上下文中是相同的。
这些属性很少直接存在于实例上,通常它们是隐藏的,以阻止在不使用 getter/setter 的情况下访问属性。
在上面的代码中,您很有可能OptionController应该扩展ObjectController. 除非控制器没有模型支持。如果您使用Ember.Controller.extend它,它不会将 getter/setter 代理到模型,它将存储、从控制器本身检索属性。
| 归档时间: |
|
| 查看次数: |
302 次 |
| 最近记录: |