在玩 ember 时,我发现有时模型存储在控制器的content
属性,有时模型也可以直接在控制器上使用。然而,当这种情况发生时,我不明白。
让我用一个我在组装 ember MVC 时发现的例子来解释一下。
设置 A - 开始
- 我定义了一个自定义
Member
对象,对应MemberRoute
, MemberView
类和具有名称的模板member
.
- The
Member
对象有一些属性,例如id
, nickname
, etc.
-
NOTE: 没有表单的控制器
MemberController
被定义,因此根据 ember 的约定,它自己提供控制器。
设置 B - 定制
- 与设置 A 相同,但现在有一个
MemberController
定义包含一些从模板内触发的操作方法。
奇怪的行为(分别是我不完全理解的内容)
- 在设置A中,我可以参考
Member
的属性直接与{{id}}
or {{nickname}}
.
- 在设置B中,我必须使用
{{content.id}}
or {{content.nickname}}
正如 ember 的文档中所记录的那样,MemberView
does
setupController : function(controller, member) {
controller.set('content', member);
},
那么,有人可以帮助我理解为什么会有差异以及差异在哪里吗?目前,我的猜测是
- 模板的上下文不同(控制器的设置中可能缺少一个代码片段?)
or
- ember 自动提供的默认控制器具有一些自定义控制器无法直接使用的附加功能。
任何帮助理解这一点的帮助都将受到高度赞赏。我已经花了很长时间才走到这一步。我首先认为这可能是由 requireJS 项目设置引入的模块化(好吧,我仍然认为这可能会产生影响)。 Ember 是 v1.0pre4。
提前致谢!
帕特里克
那么,有人可以帮助我理解为什么会有差异以及差异在哪里吗?目前,我的猜测是
模板的上下文不同(控制器的设置中可能缺少一个代码片段?)
或者
ember 自动提供的默认控制器具有一些自定义控制器无法直接使用的附加功能。
如果没有看到你的代码,很难确定,但我最好的猜测是你的MemberController
延伸Ember.Controller
。 ember 提供的默认值(在这种情况下)将是Ember.ObjectController
。如果这就是您想要的,请将 MemberController 定义更改为:
App.MemberController = Ember.ObjectController.extend({
myProperty: 'value'
});
objectController 充当它的代理content
属性,通常是一个 ember 模型。因此,如果连接正确,您将永远不需要通过“content”属性访问模型。如果你看到类似的东西:
{{content.id}} or {{content.nickname}}
这是您应该更改为 ObjectController 的标志。看EBER 指南:代表单一模型 http://emberjs.com/guides/controllers/representing-a-single-model-with-objectcontroller/!以获得更详细的解释。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)