使用ember,我发现有时模型存储在控制器的content属性中,有时模型也可以在控制器上直接使用.但是,我不明白,在这种情况下.
让我通过组装我的余烬MVC时发现的一个例子来解释它.
设置A - 开始
Member对象,相应的MemberRoute,MemberView类和一个名称模板member.Member对象有一些属性,如id,nickname等MemberController定义表单的控制器,因此通过ember的约定,它自己提供控制器.设置B - 自定义
MemberController定义包含从模板中触发的一些操作方法.奇怪的行为(分别是我不完全理解的)
Member直接用{{id}}或引用它的属性{{nickname}}.{{content.id}}或{{content.nickname}}如ember的文档中所记录的MemberView那样
setupController : function(controller, member) {
controller.set('content', member);
},
Run Code Online (Sandbox Code Playgroud)
那么,有人可以帮助我理解为什么差异和差异在哪里?目前,我的猜测也是
要么
任何帮助理解这一点是非常感谢的.到目前为止,我已经花了很长时间.我首先想到的可能是项目设置与requireJS引入的模块化(好吧,我仍然认为可能会产生影响).Ember是v1.0pre4.
提前致谢!帕特里克
那么,有人可以帮助我理解为什么差异和差异在哪里?目前,我的猜测是模板的上下文不同(可能在控制器的设置中缺少代码片?)或者由ember自动提供的默认控制器,还有一些不直接的魔法可用于定制控制器.
没有看到你的代码就很难肯定地说,但我最好的猜测是你的MemberController扩展Ember.Controller.由ember提供的默认值(在这种情况下)将是一个Ember.ObjectController.如果这是你想要的,将你的MemberController定义更改为:
App.MemberController = Ember.ObjectController.extend({
myProperty: 'value'
});
Run Code Online (Sandbox Code Playgroud)
objectController充当其content属性的代理,通常是ember模型.因此,如果连接正确,您就不需要通过'content`属性访问模型.如果你看到类似的东西:
{{content.id}} or {{content.nickname}}
Run Code Online (Sandbox Code Playgroud)
这是一个标志,你应该改为ObjectController.参见EMBER GUIDES:代表一个单一型号!有关更详细的解释.