我有一个像
这样的把手模板<select accesskey="z" class="timezone">
{{#each timezones}}
<option value="{{@key}}">{{this}}</option>
{{/each}}
</select>
和Marionette.ItemView的相应部分一样:
var TimeView = Backbone.Marionette.ItemView.extend({
template : TimeTemplate ,
className : 'time-selector-extra',
onRender: function(){
var context = this.model.toJSON();
context.isnew = this.model.isNew();
context.timezones = JSON.parse(Timezones.timezonesList);
}
.
.
});
我现在需要的是,只要获得所有时区列表的值,就会在onRender期间填充模板中的选项字段。
答案 0 :(得分:1)
您可以使用serializeData View方法使用来自当前模型以外的其他来源的数据填充模板。
var TimeView = Backbone.Marionette.ItemView.extend({
template : TimeTemplate ,
className : 'time-selector-extra',
serializeData: function(){
var context = this.model.toJSON();
context.isnew = this.model.isNew();
context.timezones = JSON.parse(Timezones.timezonesList);
return context;
}
.
.
});
由于此方法会覆盖默认序列化(仅return this.model.toJSON()
),因此请确保返回对象以按需填充模板。
如果在呈现视图时时区数据不可用,则可以在时区对象上listenTo
一个事件,以便在数据可用时重新呈现视图。
var TimeView = Backbone.Marionette.ItemView.extend({
initialize: function(){
this.listenTo(Timezones, 'change', this.render)
},
...
})
(我假设Timezones是Backbone.Model的一个实例,会触发change
事件)