我有一个问题:
假设我在控制器中有一个'users'属性,其中包含一个用户对象列表,那么在模板中,我想做的事情如下: (currentUser只是ApplicationController中可用于任何模板的属性)
用户中的每个人 如果u.id是currentUser.id renderThisBlock
显然'如果'助手不能像那样工作,看起来Ember不支持拦截助手,所以我不确定如何实现这一点,
请注意我需要每次迭代的条件,否则我会在控制器中公开一个返回布尔值的方法。
感谢。
答案 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。
谢谢!