Backbone模型具有属性“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 Helper声明:
Handlebars.registerHelper('times', function(n, selectedYear, block) {
// I need to use "this.model.attributes.selectedYear" here
});
PS:“times”是自定义助手的名称,“n”是循环运行的次数。
我也试过这个:
template: Handlebars.compile("{{#times 27 selectedYear}}{{/times}}")
但它仍然无效。
答案 0 :(得分: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
修改强>
要在Backbone 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为您做了很多这样的事情 - 如果您给Marionette View一个模板,它会自动传递模型属性,因此您不需要提供render
方法。 / p>
例如:
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.
答案 1 :(得分:0)
您应该在模型selectedYear
中设置defaults
:
var sq2SelectCarYearModel = Backbone.Model.extend({
urlRoot: "api/caryears",
defaults: {
selectedYear: "0"
}
});
这样它就会被添加到模型attributes
属性中。要在创建后进行设置,您应该使用set()
方法,该方法会将属性添加到模型属性哈希。
现在,它已作为模型中的直接属性添加,this.model.selectedYear
可能有效,但不是正确的方法。应该在模型属性哈希中添加数据,以便事件之类的其他事情正常工作