我完全被困在这个问题上,无法弄清楚为什么会发生这种情况。我在 Marionette 应用程序中使用 Backbone.Paginator。此外,对于我使用 Tastypie 的 API,这无关紧要,但我希望尽可能详尽地进行解释。
首先,我定义了一个可分页的集合:
Entities.SimCollection = Backbone.PageableCollection.extend({
url: "api/sims/response/",
mode: "infinite",
state: {
pageSize: null,
sortKey: "updated",
order: 1
},
queryParams: {
totalPages: null,
totalRecords: null,
currentPage: null,
sortKey: "sort",
order: "direction",
directions: {
"1": "asc",
"-1": "desc"
}
},
parseRecords: function(resp) {
return resp.objects;
},
parseLinks: function (resp, xhr) {
return resp.meta;
},
model: Entities.Sim
});
当我通过使用此代码的视图来破坏模型时:
simsListView.on("itemview:sim:delete", function(childView, args){
args.model.destroy();
});
然后我得到一个:Uncaught RangeError: Maximum call stack size exceeded
,如果 chrome 中的控制台是打开的,浏览器就会完全崩溃。
我唯一能让它停止抛出错误的方法是做一些涉及将模式从“无限”切换到“服务器”的事情,但这似乎完全错误,它也失去了状态并返回如果我在任何其他页面上删除模型,则转到第一页:
simsListView.on("itemview:sim:delete", function(childView, a
rgs){
sims.switchMode("server");
args.model.destroy();
});
当然,非常感谢任何帮助。
附加信息:
在我的 Layout(ItemView) 我正在做这样的事情:
Sim.SimView = Marionette.Layout.extend({
initialize: function(options) {
this.userModel = options.userModel;
},
triggers: {
"click td a.js-edit": "sim:edit",
"click button.js-view": "sim:view"
},
tagName: "tr",
template: "#sims-item",
behaviors: {
Confirmable: {
event: "sim:delete",
message: "Are you sure you want to delete this SIM?"
}
},
regions: {
editRegion: "#edit-region",
deleteRegion: "#delete-region"
}
});
它使用木偶行为来提醒用户在删除项目之前进行确认。