2015-01-02 2 views
2

Я перешел в последнюю версию Ember версии 1.9.1 и Handlebars версии 2.0.0. В этом я получаю сообщение об ошибке «Использование Ember.Handlebars.get устарело, используйте вместо этого компонент Component или Ember.Handlebars.makeBoundHelper».Как получить исходное значение в помощниках регистра руля?

У меня есть такой код,

Handlebars.registerHelper('ifCond', function (temp_v1, operator, temp_v2, options) { // No I18N 

    var v1,v2; 
    v1 = Ember.Handlebars.get(this, temp_v1, options); 
    v2 = Ember.Handlebars.get(this, temp_v2, options); 

     if(v1 == undefined){ 
      v1 = temp_v1; 
     } 
     if(v2 == undefined){ 
      v2 = temp_v2; 
     } 


     switch (operator) { 
      case '==': 
      return (v1 == v2) ? options.fn(this) : options.inverse(this); 
      case '!=': 
      return (v1 != v2) ? options.fn(this) : options.inverse(this); 
      default: 
      return options.inverse(this); 
     } 
}); 

Здесь, мне нужно проверить данное строковое значение равно или нет. Если я удалю «Ручки» в Ember.Handlebars.get (это, temp_v1, options), эта ошибка устаревания исчезнет. Но я не смог получить исходное значение temp_v1.

JSBIN LINK: JSBIN LINK

+0

Небольшое предложение: не использовать какой-либо логическую операцию в га ndlebars. Это мешает вам писать тесты. – saygun

+0

Каково ваше предложение избавиться от ifs? Где должна быть логика? – Nicolas

ответ

1

С минимальными изменениями в коде публикуемую, возможное решение может быть по линии установки правильно модифицированную itemController к {{each}} помощника, а затем получить целевое свойство из этого контроллера.

Такой подход сильно связывает itemController структуру (то есть item свойство и toString функции) к структуре шаблона HBS (т.е. item свойство, определенное в each хелперов), что не так уж плохо, пока помощник остается независимым и многоразовые.

Пример,

http://emberjs.jsbin.com/geqezicaki/1/edit?html,js

HBS

<script type="text/x-handlebars" data-template-name="index"> 
    <ul> 
    {{#each item in model itemController="test"}} 
    {{#ifCond item '==' red}} 
     <li>{{item}}</li> 
    {{/ifCond}} 
    {{/each}} 
    </ul> 
    </script> 

JS

Handlebars.registerHelper('ifCond', function (temp_v1, operator, temp_v2, options) { // No I18N 

     var v1,v2; 
     //v1 = Ember.get(this, temp_v1, options); 
     //v2 = Ember.get(this, temp_v2, options); 
    v1 = options.data.view.get("controller").get(temp_v1); 
    v2 = options.data.view.get("controller").get(temp_v2); 

      if(v1 === undefined){ 
       v1 = temp_v1; 
      } 
      if(v2 === undefined){ 
       v2 = temp_v2; 
      } 


      switch (operator) { 
       case '==': 
       return (v1 == v2) ? options.fn(this) : options.inverse(this); 
       case '!=': 
       return (v1 != v2) ? options.fn(this) : options.inverse(this); 
       default: 
       return options.inverse(this); 
      } 
    }); 


App.TestController = Em.ObjectController.extend({ 
    item:Em.computed.alias("model"), 
    toString:function(){return this.get("item");} 
}); 
Смежные вопросы