gpt4 book ai didi

ember.js - 基于内容的Ember选择 View Controller

转载 作者:行者123 更新时间:2023-12-02 06:04:02 26 4
gpt4 key购买 nike

我目前有一个 View 设置,根据模型渲染模板:

<ul>
{{#each controller.sortedAll}}
{{view App.ScoreView}}
{{/each}}
</ul>


App.ScoreView = Ember.View.extend({
templateName: function(){
var item = this.get('context')
if (item.sort < 8){
return 'low'
} else {
return 'high'
}
}.property(),
})

我正在努力为每个单独的 View 分配一个特定的 Controller 。 jsbin是: http://jsbin.com/tahag/5/edit

是否可以使用 App.ScoreViewcontroller:中指定 Controller ?还是我最好尝试设置项目 Controller :
{{view App.ScoreView itemController="VAL"}}

并从父 Controller 传递 VAL作为属性?

最佳答案

Controller 是从当前作用域继承的(在 View 上定义itemController不会做任何事情)。您应该对每个对象执行此操作。

{{#each controller.sortedAll itemController='val'}}
{{view App.ScoreView}}
{{/each}}

然后在 View 中,您可以执行 this.get('controller')...
如果您希望每个项目都具有不同类型的 Controller ,也可以执行if语句和 {{render 'high' this}}
{{#each controller.sortedAll}}
{{#if isBlue}}
{{render 'blue' this}}
{{/if}}
{{#if isGreen}}
{{render 'green' this}}
{{/if}}

{{/each}}

个人建议:

为了避免使模板过于复杂,我只使用一个 Controller 。
 {{#each controller.sortedAll itemController='score'}}
{{input value=sort}}
{{view App.ScoreView}}
{{/each}}

添加计算属性所依赖的内容,以使其自动更新:
App.ScoreView = Ember.View.extend({
templateName: function(){
var sort = this.get('controller.sort');
if (sort < 8){
return 'low';
} else {
return 'high';
}
}.property('controller.sort'),
});

利用 computed帮助器
App.ScoreController = Ember.ObjectController.extend({
isVeryHigh: Em.computed.gt('sort', 20),
isVeryLow: Em.computed.lt('sort', 4)
});

示例: http://jsbin.com/sidebozi/1/edit

关于ember.js - 基于内容的Ember选择 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24376190/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com