我写了一条非常简单的路线,导出带有子集合作为其模型的对象:
App.IndexRoute = Ember.Route.extend({
model: function() {
return Ember.Object.create({
objects: [...]
});
}
});
现在在我的模板中,我尝试遍历对象,如下所示:
{{#each objects}}
...
{{/each}}
出于某种原因,这在官方的ember jsfiddle中有效,但是当我在本地运行相同的代码时,必须将其更改为{{#each content.objects}}才能起作用。我的案例和jsfiddle之间唯一的区别是:
我使用browserify + hbsify来编译模板,而不使用内联把手模板
我没有定义应用程序模板,而jsfiddle却定义了。
我想念什么?
最佳答案
我可以解释一下这3个之间的区别,并希望可以使事情有所澄清。{{#each objects}}
-从控制器的objects
属性中提取。如果您明确定义了一个名为objects
的属性,它将使用该属性。但是,如果您尚未明确定义一个(我假设是这种情况),则控制器(从ObjectProxy扩展)将请求转发给content
属性。
因此,第一个Ember调用controller.get('objects')
,由于您未定义undefined
属性,它将返回objects
。从那里,将调用unknownProperty
函数,该函数将返回content.objects
的内容。
最重要的是,根据声明控制器的方式,使用此表格的方式会有所不同。如果可能,请尽量避免这种情况。{{#each model.objects}}
-model
实际上是content
的别名,但是从技术上讲您不应该知道这一点。 content
属性只是Ember对象代理如何工作的实现细节。
最后,只需知道model
可以保存当前模型,并且您应该更喜欢这种访问属性的方法。 (因为我认为这消除了歧义。){{#each content.objects}}
-content
是Ember对象代理的实现细节。在这种情况下,content
是您提供的型号。您应避免使用此方法,因为它依赖于对象代理的属性命名为content
(技术上随时可能会更改)。
因此,对于您的问题,我想{{#each objects}}
无法正常工作,因为以某种方式定义了另一个objects
属性。您应该改为使用{{#each model.objects}}
。 (或者,如果可以,请切换到ArrayController并仅使用{{#each}}
。
关于javascript - {{#each objects}}与{{#each model.objects}}与{{#each content.objects}}对比,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23179346/