Ember.js 从模板访问模型
在玩ember时,我发现有时模型存储在控制器的Ember.js 从模板访问模型,ember.js,Ember.js,在玩ember时,我发现有时模型存储在控制器的content属性中,有时模型也可以直接在控制器上使用。然而,我不明白,在这种情况下 让我用我在组装ember MVC时发现的一个例子来解释它 设置A-开始 我定义了一个自定义的成员对象、相应的成员路由、成员视图类和一个名为成员的模板 成员对象具有一些属性,例如id,昵称,等等 注意:未定义MemberController形式的控制器,因此按照ember的约定,它自行提供控制器 设置B-自定义设置 与设置A相同,但现在定义了一个MemberCo
content
属性中,有时模型也可以直接在控制器上使用。然而,我不明白,在这种情况下
让我用我在组装ember MVC时发现的一个例子来解释它
设置A-开始
- 我定义了一个自定义的
对象、相应的成员
、成员路由
类和一个名为成员视图
的模板李>成员
对象具有一些属性,例如成员
,id
,等等昵称
- 注意:未定义
形式的控制器,因此按照ember的约定,它自行提供控制器MemberController
- 与设置A相同,但现在定义了一个
,其中包含一些从模板中触发的操作方法MemberController
- 在设置A中,我可以使用
或{{id}
直接引用{{昵称}
成员的属性
- 在设置B中,我必须使用
或{{content.id}
{{content.昵称}
MemberView
setupController : function(controller, member) {
controller.set('content', member);
},
那么,有人能帮我理解为什么会有差异,以及差异在哪里吗?目前,我的猜测是
- 模板的上下文不同(控制器的设置中可能缺少代码段?)
- ember自动提供的默认控制器具有一些额外的魔力,这些魔力对于自定义控制器来说是无法直接使用的
MemberController
扩展了Ember.Controller
。ember(在此场景中)提供的默认值应该是ember.ObjectController
。如果这是您想要的,请将MemberController定义更改为:
App.MemberController = Ember.ObjectController.extend({
myProperty: 'value'
});
objectController充当其内容
属性的代理,通常是余烬模型。因此,如果连接正确,您就不需要通过“content”属性访问模型。如果你曾经看到过这样的事情:
{{content.id}} or {{content.nickname}}
这是您应该更改为ObjectController的标志。看见有关更详细的说明。一个
ObjectController
充当控制器内容对象集的代理。未定义控制器时,Ember将为您创建一个控制器,并将其内容默认设置为路由中model()函数返回的任何对象(如果已定义)。无论您定义自己的控制器还是让Ember为您定义一个控制器,行为都应该相同
模板中的默认上下文是控制器本身,即this=控制器的实例或生成的实例
。当您尝试在该上下文中访问昵称时,Ember将首先尝试根据控制器本身解析昵称,如果未找到任何内容,它将根据其内容解析昵称,即如果您已手动将其设置为控制器的内容,则根据对象解析昵称
最后,路由中没有默认的model()函数实现
,除非您使用动态URL,say/foo/id解析为/foo/:id
,Ember使用提供的id加载带有提供id的foo对象,从而为model()函数提供默认实现。最后,它归结为相同的机制,只是为了您的方便而自动进行
我建议您收听更多有关如何通过Ember为您实现自动化的见解。但是当涉及到显示的内容时,您不需要手动连接控制器的内容。太好了,谢谢Michael。这不仅是解释,也是我代码中的错误所在。我有App.MemberController=Ember.Controller.extend({})代码>。至少这个错误让我们对控制器有了更好的了解。又来了!PHA已经得分了,迈克尔真的得分了。但是谢谢你的解释和有趣演讲的链接。