首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“无限”模式下的Backbone.Paginator在model.destroy上抛出“超过最大调用堆栈大小”

“无限”模式下的Backbone.Paginator在model.destroy上抛出“超过最大调用堆栈大小”
EN

Stack Overflow用户
提问于 2014-06-16 15:18:57
回答 2查看 464关注 0票数 1

我完全被困在这件事上,不知道为什么会发生这种事。我在Marionette应用程序中使用Backbone.Paginator。另外,对于API,我使用的是Tastypie,这并不重要,但我想尽可能地详细解释。

首先,我定义了一个可分页的集合:

代码语言:javascript
复制
 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

 });

当我通过我的观点摧毁一个模型的时候,用这个代码:

代码语言:javascript
复制
  simsListView.on("itemview:sim:delete", function(childView, args){
    args.model.destroy();
  });

然后我得到一个:Uncaught RangeError: Maximum call stack size exceeded,如果chrome中的控制台是打开的,浏览器就会完全崩溃。

唯一能让它停止抛出错误的方法是做一些涉及将模式从“无限”切换到“服务器”的事情,但这似乎完全错误,而且如果我在任何其他页面上删除模型,它也会失去其状态并返回到第一页:

代码语言:javascript
复制
          simsListView.on("itemview:sim:delete", function(childView, a
rgs){
            sims.switchMode("server");
            args.model.destroy();
          });

当然,任何帮助都是非常感谢的。

附加信息:

在我的布局(ItemView)中,我正在做这样的事情:

代码语言:javascript
复制
  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"
    }
  });

它使用Marionette行为在删除项目之前提醒用户确认。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-19 15:16:15

所以,我想出了答案--至少对我来说,关键是在删除方法中,这个方法最初是:

代码语言:javascript
复制
          simsListView.on("itemview:sim:delete", function(childView, args){
            sims.switchMode("server");
            args.model.destroy();
          });

导致“最大调用堆栈超出”--解决方案是修改它,使其首先不是切换到“服务器”模式,而是保持“无限”模式,而且,我还需要从完整集合中删除模型,然后销毁它--这似乎就是解决方案:

代码语言:javascript
复制
          simsListView.on("itemview:sim:delete", function(childView, args) {
            sims.fullCollection.remove(args.model);
            args.model.destroy();
          });

如果有人想出了一个具体的原因,我会有兴趣听到,但否则问题解决了!

票数 2
EN

Stack Overflow用户

发布于 2014-06-16 15:38:12

在您的项目视图中,您是否只是触发" itemview :sim:delete“,或者是否发生了其他事情,我的第一个猜测是,有什么东西正在监听和触发相同的事件。在这种情况下对模型的破坏。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24246993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档