0

我只想显示从数组中选择的内容,如果它们包含在另一个数组中,但似乎我不能这样做,如果你知道我应该怎么做,或者你有关于如何以不同方式做的建议我会很高兴听到它。

这是我的车把视图,

    {{#each App.User.issues}}
        {{#view App.LocationListItemIssueView issueBinding="this" locationBinding="parentView.location"}}
            {{#if location.rating[issue.id] != null}}
                {{location.rating[issue.id].value}}
           {{else}}         
                {{issue.name}} Not Rated    
           {{/if}}      
           {{issue.name}}   
        {{/view}} 
    {{/each}}   

我得到了他的错误

Uncaught Error: Parse error on line 1:
...                 {{#if location.rating[issue.id] != 
-----------------------^
Expecting 'ID'
4

2 回答 2

1

if 不像 if() 那样工作。它不需要完整的语句并对其进行评估,而是需要一个指向属性的路径,该属性被转换为布尔值。

如果你想在一个集合视图中显示两个数组的交集,那么你应该创建一个 arrayController,并将该 arrayController 的内容作为计算属性来计算数组的交集。然后,将您的 collectionview 绑定到该数组控制器。

这看起来像:

MyApp.intersectionController = Em.ArrayController.create({
  arrayOneBinding: 'MyApp.firstArray',
  arrayTwoBinding: 'MyApp.secondArray',
  content: function() {
    ... create and return an array which is the intersection of both arrays ...
  }.property('arrayOne.@each', 'arrayTwo.@each').cacheable()
});

如果您想渲染数组中的所有项目,但以某种方式基于另一个数组更改模板,您可以在 itemViewClass 中执行以下操作:

rating: function() {
    return this.getPath('location.rating')[this.getPath(content.id)];
}.property('content', 'location').cacheable();

然后在你看来:

{{#if rating}}
  {{rating}}
{{else}}
  {{content.name}} not reated
{{/if}}
于 2012-05-03T00:21:28.473 回答
0

这也可以通过 Handlebars 助手解决。

Handlebars.registerHelper('compare', function(value, options){
    //This would be tweaked to fit your needs. 
    //I'm checking that a passed in value matches the bound value.
    return this.get('content_type') === value ? options.fn(this) : options.inverse(this);
})

http://handlebarsjs.com/expressions.html

于 2012-05-03T01:42:04.210 回答