1

我完全被困在这个问题上,无法弄清楚为什么会发生这种情况。我在 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"
    }
  });

它使用木偶行为来提醒用户在删除项目之前进行确认。

4

2 回答 2

2

所以,我想通了——至少对我来说,这里的关键是在 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();
          });

如果有人为此提出具体原因,我很想听听,但否则问题就解决了!

于 2014-06-19T15:16:15.627 回答
0

在您的项目视图中,您只是触发“itemview:sim:delete”还是发生其他任何事情,我的第一个猜测是某些事情正在侦听并触发相同的事件。在这种情况下,模型上的破坏。

于 2014-06-16T15:38:12.107 回答