在迭代中通过逻辑渲染块

时间:2013-07-29 16:19:35

标签: ember.js

我有一个问题:

假设我在控制器中有一个'users'属性,其中包含一个用户对象列表,那么在模板中,我想做的事情如下: (currentUser只是ApplicationController中可用于任何模板的属性)

用户中的每个人   如果u.id是currentUser.id      renderThisBlock

显然'如果'助手不能像那样工作,看起来Ember不支持拦截助手,所以我不确定如何实现这一点,

请注意我需要每次迭代的条件,否则我会在控制器中公开一个返回布尔值的方法。

感谢。

2 个答案:

答案 0 :(得分:0)

您可以在itemController

中使用{{#each}}

只是

{{#each u in users itemController="App.TestController"}} 
  {{#if someComputedProperty}}
     renderThisBlock
  {{/if}}
{{/each}}

您可以定义itemController,它将userId和currentUserId检查为

App.TestController = Em.ObjectController.extend({
   someComputedProperty: function(){
     var currentUserId = this.get('target).get('controllers.application.currentUserId');
     return (this.get('content.userId) === currentUserId)? true : false;
   }
});

将需求放在itemController中看起来效率不高。因此,在您的上下文控制器中通过needs使用您的应用程序控制器(我的意思是模板的上下文)

 App.AnotherController = Em.ArrayController.extend({
   needs: ['application']
 });

希望这能完成你的工作

答案 1 :(得分:0)

谢谢,

有两种选择:

可以按照这样的部分创建视图,然后可以将此方法添加到每次迭代将具有上下文的视图中

第二个是上面的解决方案,但是在迭代中,一个变化应该指定控制器的短名称而不是全局命名空间中的全名,例如:

{{#each u in users itemController="test"}} 

这绑定到App.TestController。

谢谢!