2016-01-20 2 views
0

Модель Backbone имеет атрибут «selectedYear». Мне нужно передать этот атрибут «selectedYear» в Handlebars Custom Helper.Атрибут атрибута базовой линии для Handlebars Helper

var sq2SelectCarYearModel = Backbone.Model.extend({ 

    urlRoot: "api/caryears", 
    selectedYear: "0" 


}); 

Вот что я пробовал: Это рули шаблонный:

template: Handlebars.compile("{{#times 27 this.model.attributes.selectedYear}}{{/times}}") 

Рули Helper декларация:

Handlebars.registerHelper('times', function(n, selectedYear, block) { 
    // I need to use "this.model.attributes.selectedYear" here 

}); 

PS: "раз" это название обычая helper, «n» - это количество циклов, в течение которых цикл будет запущен.

Я также попытался это:

template: Handlebars.compile("{{#times 27 selectedYear}}{{/times}}") 

, но она по-прежнему не работает.

+0

интересно, помогли ли ответы ...! –

ответ

0

Вы должны установить selectedYear в модели defaults:

var sq2SelectCarYearModel = Backbone.Model.extend({ 
    urlRoot: "api/caryears", 
    defaults: { 
    selectedYear: "0" 
    } 
}); 

Так что он будет добавлен к моделям attributes собственности. Чтобы установить его после создания, вы должны использовать метод set(), который добавит свойства к хэшам атрибутов моделей.

прямо сейчас, он добавлен в качестве прямого свойства в модели, this.model.selectedYear может работать, но не правильный способ сделать это. Данные должны быть добавлены в хэши атрибутов моделей, так что другие вещи, такие как события, работают правильно

1

selectedYear не является атрибутом вашей модели, а является собственностью.

Вы можете установить его по умолчанию, выполнив:

var CarModel = Backbone.Model.extend({ 
    urlRoot: 'api/caryears', 

    defaults: { 
    selectedYear: 0 
    } 
}); 

var model = new CarModel() 
// model.get('selectedYear') -> 0 

вы можете также передать его в на конкретизации

var model2 = new Model({ selectedYear: 2 }); 
// model2.get('selectedYear') -> 2 

или вы можете установить его после конкретизации:

var model3 = new Model(); 
model3.set('selectedYear', 3); 
// model3.get('selectedYear') -> 3 

EDIT

Для использования модели атрибутов в позвоночнике View, я предложил бы делать что-то вроде следующего

var MyView = Backbone.View.extend({ 
    initialize: function() { 
    this.model = new Model({ 
     selectedYear: 1 
    }); 
    }, 

    render: function() { 
    var template = Handlebars.compile("{{#times 27 selectedYear}}{{/times}}"); 
    this.$el.html(template(this.model.toJSON)); 
    } 
}); 

Backbone.Marionette делает много это для вас - если вы даете марионетка Посмотреть шаблон, он будет автоматически передаются в атрибутах моделей, поэтому вам не нужно предоставлять метод render.

например:

var MyView = Marionette.ItemView.extend({ 
    template: Handlebars.compile('your template here') 
}); 

var model = new Model({selectedYear: 1}); 

var view = new view({model: model}); 

view.render(); 

// or region.show(view) which will automatically render the view. 
+0

thankyou, когда я пытаюсь передать параметр в качестве значения для дескрипторов, он отлично работает: {{#times 27 '1993'}} {{/ times}}, как вы можете видеть, я прошел «1993» в качестве параметр, и я могу использовать его в объявлении помощника Handlebars, но мне нужно перейти в model.selectedYear, чтобы сделать его динамическим – Mark

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