在Bakbone Marionette中,我正在尝试使用模型中的数据显示IteView。 来自其他api的JSON数据很好。问题是,每当我尝试在区域内显示视图时,它都会显示上述错误。
这是代码:
TestDataModel = Backbone.Model.extend({
url: function(){
return '/test.php?api=getTestData
}
});
TestDataView = Backbone.Marionette.ItemView.extend({
template: Handlebars.compile($('#testing-template').html()),
initialize: function(){
_.bindAll(this);
// I want to bind render when the model changes
this.model.on('change', this.render, this);
this.model.fetch();
}
});
<script id='testing-template' type='text/x-handlebars-template'>
Testing template: {{test_token1}} {{test_token2}}
</script>
// this the main function that render the data on a main base page region.
onRender: function(){
var testModel = new TestDataModel.Model();
var testView = new TestDataView({
model:testModel
});
this.test_region.show(testView);
}
答案 0 :(得分:2)
使用onShow而不是onRender。当调用onRender时,该区域尚未设置
答案 1 :(得分:1)
不要绑定模型,而是尝试listenTo约定:
TestDataView = Backbone.Marionette.ItemView.extend({
template: Handlebars.compile($('#testing-template').html()),
initialize: function () {
this.listenTo(this.model, 'change', this.render);
this.model.fetch();
}
});
就像我上面所述,如果这仍然不起作用,你要么丢失一些东西,要么你需要提供自己的渲染。
答案 2 :(得分:1)
请勿从您的视图初始值设定项中调用fetch。
TestDataModel = Backbone.Model.extend({
url: function(){
return '/test.php?api=getTestData
}
});
TestDataView = Backbone.Marionette.ItemView.extend({
template: Handlebars.compile($('#testing-template').html()),
initialize: function(){
_.bindAll(this);
this.model.on('change', this.render, this);
}
});
<script id='testing-template' type='text/x-handlebars-template'>
Testing template: {{test_token1}} {{test_token2}}
</script>
// this the main function that render the data on a main base page region.
onRender: function(){
var self = this;
var testModel = new TestDataModel.Model();
var testView = new TestDataView({
model:testModel
});
this.testModel.fetch().done(function(){
self.test_region.show(testView);
});
}