gpt4 book ai didi

javascript - Ember.js:关于 Controller 、 'this'、 'content' 和模型结构的问题

转载 作者:数据小太阳 更新时间:2023-10-29 05:30:00 24 4
gpt4 key购买 nike

我对我的第一个功能性应用程序有了更深入的了解,需要更好地了解它在我的 Controller 中发生了什么。

这里我有一个 Controller 来处理用户点击“选项”时的操作。查看 this 对象提出了几个问题:

  1. 这个到底是什么?我希望它是我的 Option 模型的一个实例,但它缺少一些属性(比如“identity: 'model: Option'”)。
  2. 如果 this 是我的 Option 模型的一个实例,为什么“model”属性未定义?为什么它不知道这一点?
  3. 什么是this.content?看起来有些东西在 content 中(idisSuppressed),有些不是(this.isSelected) - 为什么会这样?

免责声明:虽然目前还没有出现任何问题,但我的 ember 应用架构中肯定存在错误。

屏幕截图调试 Controller : inspecting ember.js controller & data

选项模型和 Controller

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

最佳答案

这取决于 this 在哪里,如果你在 Controller 中,它就是 Controller 。如果您的 Controller 是 ObjectController/ArrayController,它会将 get/set 调用代理到底层模型。 content/model 在 Controller 的上下文中是一样的。

属性很少直接存在于实例上,通常它们被隐藏以阻止在不使用 getter/setter 的情况下访问属性。

在您上面的代码中,您的 OptionController 很可能应该扩展 ObjectController。除非 Controller 不受模型支持。如果您使用 Ember.Controller.extend,那么它不会将 getter/setter 代理到模型,它会存储、检索来自 Controller 本身的属性。

关于javascript - Ember.js:关于 Controller 、 'this'、 'content' 和模型结构的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20334202/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com