2014-12-01 2 views
3

Я использую http://ivaynberg.github.io/select2/ для обеспечения функциональности автозаполнения в приложении rails-emberjs. У меня есть значение some_dynamic_id. Мой рули код, как показано ниже:Строка интерполяции в рулевом шаблоне emberjs

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

Я хочу, чтобы назначить динамически созданный URL с атрибутом searchUrl. Я попытался использовать bind-attr от Ember Interpolation in a href tag in handlebars template, но не смог заставить его работать.

ответ

8

Помните, что шаблоны Handlebars не имеют логики, поэтому нет понятия интерполяции строк. Вы должны сделать это в вычисленном свойстве внутри вашего контроллера (или компонента).

В контроллере:

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

В шаблоне:

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

Update: Это было долгое время, так как я ответил на этот вопрос, так что я думал, что я бы обновить. В Ember.js теперь используется более новая версия Handlebars, поддерживающая subexpressions. Это означает, что теперь возможна конкатенация строк в шаблонах. Вам просто нужно написать помощника конкатенации.

// 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 "https://stackoverflow.com/users/" some_dynamic_id "/books/search") 
    optionValuePath="content.id" 
    optionLabelPath="content.name" 
    multiple="false" 
}} 

Я все еще сильно предпочитаю мой первый ответ в этой ситуации, но второй теперь возможно.

Смежные вопросы