我正在使用Marionette.CompositeView
,我想了解serializeData和onRender之间的区别
基于这两个例子(1)和(2)。
根据文档,在应用模板之前在渲染中调用serializeData,并在应用模板后在渲染中调用onRender。
我的问题是:
1)为什么例子(1)起作用而(2)不起作用?
2)如果我重置了集合,是否会重新呈现Marionette.CompositeView
?
请参阅代码中的注释以获取更多详细信息。
(1)
return Marionette.CompositeView.extend({
initialize: function () {
this.collection = new MyCollection();
this.collection.fetch();
},
onRender: function () {
this.collection.length > 0 ? this.$el.show() : this.$el.hide();
// it returns this.collection.length > 0
// differently from serializeData.
}
});
(2)
return Marionette.CompositeView.extend({
initialize: function () {
this.collection = new MyCollection();
this.collection.fetch();
},
serializeData: function () {
this.collection.length > 0 ? this.$el.show() : this.$el.hide();
// it returns this.collection.length = 0
// even if this.collection.length > 0. Why?
}
});
答案 0 :(得分:6)
1)如你所说,onRender
只是一个回调函数,在渲染视图后调用。
serializeData
必须返回有效的JSON对象,如Backbone Marionette documentation中所述:
如果您需要为数据自定义序列化,则可以提供 视图上的serializeData方法。它必须返回一个有效的JSON对象, 就像你在模型或集合上调用.toJSON一样。
Backbone.Marionette.ItemView.extend({
serializeData: function(){
return {
"some attribute": "some value"
}
}
});
2)IMO,答案是肯定的。在Backbone Marionette documentation中,它说:
CollectionView:自动渲染
集合视图绑定到“添加”,“删除”和“重置”事件 指定的集合。
当视图的集合被“重置”时,视图将调用render 自己并重新渲染整个系列。
将模型添加到集合时,集合视图将会 将一个模型渲染到项目视图集合中。
从集合中删除模型(或销毁/删除)时, 集合视图将关闭并删除该模型的项目视图。