[英]Passing Backbone Model attribute to Handlebars Helper
骨干網模型的屬性為“ selectedYear”。 我需要將此“ selectedYear”屬性傳遞給Handlebars Custom Helper。
var sq2SelectCarYearModel = Backbone.Model.extend({
urlRoot: "api/caryears",
selectedYear: "0"
});
這是我嘗試過的:這是把手模板:
template: Handlebars.compile("{{#times 27 this.model.attributes.selectedYear}}{{/times}}")
車把助手聲明:
Handlebars.registerHelper('times', function(n, selectedYear, block) {
// I need to use "this.model.attributes.selectedYear" here
});
PS:“時間”是自定義幫助程序的名稱,“ n”是循環將運行的次數。
我也試過這個:
template: Handlebars.compile("{{#times 27 selectedYear}}{{/times}}")
但它仍然無法正常工作。
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
編輯
要在骨干網視圖中使用模型屬性,我建議您執行以下操作
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會為您做很多事情-如果為Marionette View提供模板,它將自動傳入models屬性,因此您無需提供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.
您應該在模型的defaults
設置selectedYear
:
var sq2SelectCarYearModel = Backbone.Model.extend({
urlRoot: "api/caryears",
defaults: {
selectedYear: "0"
}
});
以便將其添加到模型attributes
屬性中。 要在創建后對其進行設置,應使用set()
方法,該方法會將屬性添加到模型屬性哈希。
現在,它已添加為模型中的直接屬性, this.model.selectedYear
可能有效,但不是正確的方法。 數據應添加到模型屬性哈希中,以便其他事件(如事件)正常運行
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.