2013-02-12 94 views
1

我有这种情况,我在其中存储模板名称的变量。我注意到,如果你有例如EmberJs:在Handlebars-helper中呈现模板

var config = { view: "PeopleView", .... } ; 

,你不能做

{{view App[config.view]}} 

如果这是可能的,我仍然有兴趣的解决方案! 反正,我决定用一个把手帮助解决这个问题:

{{setVariableView config}} 

... 

Ember.Handlebars.registerBoundHelper('setVariableView', function(value, options) { 
    return App[value.view].create(value) ; // <-- this doesn't work :) 
}) ; 

在这一点上,我不知道如何调用编译PeopleView? 有什么建议吗?

干杯

回答

1

首先,您要创建您的配置对象,因为你所做的:

App.config = Ember.Object.create({ view: 'App.MyView' }); 

然后你要注册你的助手,你已经做了,但它需要修改一点点,因为意见需要手动append版当你采取这种做法:

Ember.Handlebars.registerBoundHelper('setVariableView', function(value, options) { 
    var view = eval(value.view).create(); 
    view.append(); 
}); 

现在你可以在配置文件中传递到y我们setVariableView帮手,它会呈现中传递到您的配置视图:

{{setVariableView App.config}} 

唯一要担心的是eval利用率。也许这对清晨来说并没有什么帮助,但我现在还想不到更好的选择。

+0

您可以将配置对象定义为'App.config = Ember.Object.create({app:App,view:'MyView'});',并且在助手中:'var view = value.app [value.view ] .create();'。这样你就不需要使用'eval' :) – 2013-02-12 13:15:24

+0

value.app [value.view] .create()创建一个Object/Class。如何创建一个字符串并将其传递给上下文(如:value)? – 2013-02-12 14:20:47