我遇到一个问题,即在我的Marionette CompositeView
中以自动方式调用渲染这是正确的,问题是我在initialize
中获取集合数据并希望在此时出现渲染发生了。目前我在fetch的done方法中运行this.render()
重新渲染,但这会导致问题,因为现在每个模型有2个视图。任何人都可以推荐我如何正确防止这种初始渲染或防止重复的视图。 1个条目将输出view1和view2。
JS CompositeView
initialize: function() {
var self = this;
this.teamsCollection = new TeamsCollection();
this.teamsCollection.fetch().done(function() {
self.render();
});
},
答案 0 :(得分:0)
首先,我不相信有一种方法可以完全停止渲染,但你有很多方法可以解决这个问题。
选项1:首先获取数据,然后创建视图并在完成后将数据传递到其中。
//before view is rendered, this is outside of your view code.
var teamsCollection = new TeamsCollection();
teamsCollection.fetch().done(function(results) {
var options = {res: results};
var myView = new CompositeView(options);
myView.setElement( /* your element here */ ).render();
});
选项2:
// don't use render method, use your own
initialize: function() {
var self = this;
this.teamsCollection = new TeamsCollection();
this.teamsCollection.fetch().done(function() {
self.doRender();
});
},
render: function(){}, // do nothing
doRender: function(){
// override render here rather than using default
}
选项3 :(如果使用模板)
// if you have a template, then you can simply pass in a blank one on initialization
// then when the fetch is complete, replace the template and call render again
initialize: function() {
var self = this;
this.template = "<div></div"; // or anything else really
this.teamsCollection = new TeamsCollection();
this.teamsCollection.fetch().done(function() {
self.template = /* my template */;
self.render();
});
},
实际上我需要更多信息。视图是如何创建的?这是一个地区吗?它是动态添加的吗?你使用模板吗?你能提供更多代码吗?