【发布时间】:2013-12-22 11:08:55
【问题描述】:
我的收藏有一个老旧的问题,当我第一次加载复合视图时,一切正常,但是当我开始在我的应用程序中导航,然后回到我的复合视图(Backbone.history.navigate)时,看起来我的收藏是调用了两次(我的 itemview 被触发了两次)。
我尝试调试,但我只获取一次我的集合,只有一个 init,路由器似乎也可以。
这是我的复合视图:
'use strict';
define(["jquery", "backbone", "marionette", "text!templates/portraits/portrait.html", "view/portraits/portraitItemView", "collection/portraitCollection", "application", "JSMovieclip"], function($, Backbone, Marionette, template, PortraitItemView, portraitCollection, App) {
var PortraitsCompositeView = Marionette.CompositeView.extend({
template : _.template(template),
collection : portraitCollection,
tagName: "div",
id : "articles",
itemView : PortraitItemView,
itemViewContainer : '#list-articles',
itemViewOptions: {
collection: portraitCollection
},
initialize : function (options) {
_.bindAll(this);
this.options = options || {};
this.collection.fetch({
type: 'POST',
success : function(data, raw) {
App.execute('loader', false);
}
});
},
这是我的收藏:
'use strict';
define(["jquery", "underscore", "backbone", "marionette", "model/portraitsModel"], function($, _, Backbone, Marionette, PortraitModel) {
var PortraitCollection = Backbone.Collection.extend({
model : PortraitModel,
sync: function(method, model, options) {
var params = _.extend({
type: 'GET',
dataType: 'jsonp',
url: 'http://backend.url.fr/api/portraits/get_list/',
processData: false
}, options);
return $.ajax(params);
},
parse : function(response) {
this.totalLength = response.count;
return response.portraits;
}
});
return new PortraitCollection;
});
【问题讨论】:
-
“看起来我的集合被调用了两次(我的 itemview 被触发了两次)”是什么意思。请更详细地解释一下,我在这段代码中根本看不到调用 itemView 的任何地方。你的意思是每次你路由到初始化PortraitsCompositeView的东西时,集合只被提取一次,还是在你第一次去那里时才被提取?路由器中的代码会很有帮助。
-
您是否打算将 PortraitCollection 设为单例?返回一个新的 PortraitCollection 而不是返回“Class”的决定是“难闻的气味”!!!
标签: backbone.js triggers marionette backbone.js-collections