骨干.Paginator in 'infinite'mode抛出'最大调用栈大小超过'm
Backbone.Paginator in 'infinite' mode throws 'Maximum call stack size exceeded' on model.destroy
我完全卡住了这个,不能确切地弄清楚为什么会发生这种情况。我用的是Backbone。在一个木偶应用程序中的分页器。此外,对于API,我使用了Tastypie,这应该无关紧要,但我希望在我的解释中尽可能彻底。
首先,我定义了一个可分页集合: 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();
});
然后我得到a: Uncaught RangeError: Maximum call stack size exceeded
,如果chrome中的控制台是打开的,浏览器就完全崩溃了。
我唯一能弄清楚的是让它停止抛出错误是做一些涉及切换模式从"无限"到"服务器",但这似乎完全错误,它也失去了它的状态,回到第一页,如果我删除任何其他页面上的模型:
simsListView.on("itemview:sim:delete", function(childView, a
rgs){
sims.switchMode("server");
args.model.destroy();
});
当然,任何帮助都是非常感谢的。
附加信息:
在我的布局(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"
}
});
使用木偶行为提醒用户在删除项目之前进行确认。
我想明白了-这里的关键,至少对我来说,是在delete方法中,它最初是:
simsListView.on("itemview:sim:delete", function(childView, args){
sims.switchMode("server");
args.model.destroy();
});
导致'最大调用堆栈超过' -解决方案是修改它,这样,首先它不会切换到'服务器'模式,但保持在'无限'模式,而且,我需要从完整集合中删除模型,然后销毁它-这似乎是解决方案:
simsListView.on("itemview:sim:delete", function(childView, args) {
sims.fullCollection.remove(args.model);
args.model.destroy();
});
如果有人提出一个具体的原因,我很想听听,但除此之外问题解决了!
在你的itemview你只是触发"itemview:sim:delete"或有任何其他事情发生,我的第一个猜测是,有些东西是监听和触发相同的事件。
相关文章:
- 调用控制器后Ajax抛出错误
- 从 document.ready 调用 jQuery 插件抛出 getPreventDefault 错误
- 为什么没有调用该函数并给我抛出错误
- 带有拒绝调用和抛出错误的Promise构造函数
- 模板抛出-未捕获类型错误:无法调用方法'匹配'的未定义
- 为什么一个简单的google.load('visualization ..调用抛出错误
- 滚动侧边栏抛出 Javascript 错误“无法调用 null 的方法'偏移量'
- Angularfire-$scope在异步调用后不会更新,$apply抛出错误
- 我在angular js中调用一个数据抛出json,但不接收数据为什么
- 如何从AJAX调用和函数中抛出异常
- 在datatables.net上调用fnGetPosition抛出“;无法调用方法'到UpperCase'
- 为什么Ember会抛出“;未捕获错误:断言失败:调用已销毁对象上的集“”;载于ember.js:3722
- 调用jQuery ajaxSuccess(或任何全局AJAX事件),即使本地成功(或任何本地AJAX事件)抛出错误
- Angular指令在尝试调用控制器方法时抛出正在进行中的$digest
- 在javascript中调用方法,但是抛出错误
- 当我想调用update()函数时,jQuery.fn.yiiGridView抛出未定义错误
- 在安装或安装组件上的React抛出错误可能是由于对setState()的快速和频繁调用
- nodejs方立方评估器抛出超过最大调用堆栈大小
- 多个jQuery ajax调用-之前的调用抛出失败
- ajax json调用抛出ClientScriptManager.RegisterForEventValidation错