从模板访问模型

Pat*_*mer 5 ember.js

使用ember,我发现有时模型存储在控制器的content属性中,有时模型也可以在控制器上直接使用.但是,我不明白,在这种情况下.

让我通过组装我的余烬MVC时发现的一个例子来解释它.

设置A - 开始

  • 我定义了一个自定义Member对象,相应的MemberRoute,MemberView类和一个名称模板member.
  • Member对象有一些属性,如id,nickname
  • 注意:没有MemberController定义表单的控制器,因此通过ember的约定,它自己提供控制器.

设置B - 自定义

  • 与设置A相同,但现在有一个MemberController定义包含从模板中触发的一些操作方法.

奇怪的行为(分别是我不完全理解的)

  • 在设置A中,我可以Member直接用{{id}}或引用它的属性{{nickname}}.
  • 在设置B中,我必须使用{{content.id}}{{content.nickname}}

如ember的文档中所记录的MemberView那样

setupController : function(controller, member) {
    controller.set('content', member);
},
Run Code Online (Sandbox Code Playgroud)

那么,有人可以帮助我理解为什么差异和差异在哪里?目前,我的猜测也是

  • 模板的上下文是不同的(可能在控制器的设置中缺少代码片段?)

要么

  • 由ember自动提供的默认控制器具有一些额外的魔力,不能直接用于自定义控制器.

任何帮助理解这一点是非常感谢的.到目前为止,我已经花了很长时间.我首先想到的可能是项目设置与requireJS引入的模块化(好吧,我仍然认为可能会产生影响).Ember是v1.0pre4.

提前致谢!帕特里克

Mik*_*tti 8

那么,有人可以帮助我理解为什么差异和差异在哪里?目前,我的猜测是模板的上下文不同(可能在控制器的设置中缺少代码片?)或者由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:代表一个单一型号!有关更详细的解释.