Ember JS:如何使用{{#each}}帮助器只渲染已加载的子项?

时间:2013-03-12 18:22:20

标签: javascript ember.js

我正在使用{{#each}}助手来遍历父记录的子项:

... parent template ...

{{#each foo in foos}}
    {{#with foo}}
        {{ partial 'foo' }}
    {{/with}}
{{/each}}

在特定情况下,我只想渲染已经加载的记录。我相信你可以过滤这些记录(按照In Ember Data, how do I find only records that have been loaded?):

App.Foo.filter(function(foo) { return foo.get('isLoaded'); });

但是如何在每个助手中做到这一点?我在父记录上创建了一个loaded_foos属性,但它不起作用,因为它是一个函数,而不是一个Ember.Array。

2 个答案:

答案 0 :(得分:3)

你不能在每个助手中做到这一点。你对财产的态度确实是正确的。什么没有奏效?基本上应该是这样的:

App.ParentRecord = Ember.Object.extend({
  loadedFoos : function(){
    this.get("foos").filter(function(foo) { return foo.get('isLoaded'); });
  }.property("foos")
});

答案 1 :(得分:0)

您也可以使用条件帮助程序在模板中执行此操作。

{{#each foos}}
  {{#if isLoaded}}
    {{partial "foo"}}
  {{/if}}
{{/each}}

编辑:如果您已经在数组中添加了已加载和已卸载记录的混合集合,则上述情况有效。 OP询问如何实际获取加载的记录。我会这样做:

App.Foo = DS.Model.extend();

App.IndexRoute = Ember.Route.extend({
    model: function() {
        return App.Foo.all();
    }
});

<script type="text/x-handlebars" data-template-name="index">
    {{#each controller}}
        {{partial "foo"}}
    {{/each}}
</script>

这是一个jsfiddle示例。