在emberjs把手模板中的字符串插值

时间:2014-12-01 13:43:00

标签: ember.js handlebars.js string-interpolation

我正在使用http://ivaynberg.github.io/select2/在rails-emberjs应用程序中提供自动完成功能。我有some_dynamic_id值。我的车把代码如下:

{{
  view App.TokenAutoCompleteView                                                                                               
  searchUrl="/users/" + some_dynamic_id + "/books/search"
  optionValuePath="content.id"
  optionLabelPath="content.name"
  multiple="false"
}}

我想为searchUrl属性分配一个动态创建的url。我尝试使用Ember Interpolation in a href tag in handlebars template中的bind-attr,但无法使其正常工作。

1 个答案:

答案 0 :(得分:8)

请记住,Handlebars模板是无逻辑的,所以没有字符串插值的概念。您应该在控制器(或组件)内部的计算属性中执行此操作。

在您的控制器中:

dynamicSearchUrl: function() {
    return '/users/' + this.get('someDynamicId') + '/books/search';
}.property('someDynamicId')

在你的模板中:

{{view App.TokenAutoCompleteView searchUrl=dynamicSearchUrl ... }}

更新:自从我回答这个问题已经很久了,所以我想我会更新。 Ember.js现在使用支持subexpressions的更新版Handlebars。这意味着现在可以在模板中进行字符串连接。你只需要编写一个连接帮手。

// helpers/concat.js
export default Ember.Helper.helper(function(first, second, three) {
    // You could make this apply to more than three strings...
    return first + '' + second + '' + three;
});

完成后,只需在模板中使用子表达式:

{{
  view App.TokenAutoCompleteView
  searchUrl=(concat "/users/" some_dynamic_id "/books/search")
  optionValuePath="content.id"
  optionLabelPath="content.name"
  multiple="false"
}}

在这种情况下,我仍然非常喜欢我的第一个答案,但现在第二个答案是可能的。