Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 主干。分页器位于';无限';模式抛出';超过最大调用堆栈大小';关于model.destroy_Javascript_Backbone.js_Marionette_Tastypie_Backbone.paginator - Fatal编程技术网

Javascript 主干。分页器位于';无限';模式抛出';超过最大调用堆栈大小';关于model.destroy

Javascript 主干。分页器位于';无限';模式抛出';超过最大调用堆栈大小';关于model.destroy,javascript,backbone.js,marionette,tastypie,backbone.paginator,Javascript,Backbone.js,Marionette,Tastypie,Backbone.paginator,我完全被这件事困住了,弄不清楚为什么会发生这种事。我正在木偶应用程序中使用主干.Paginator。另外,对于API,我使用的是Tastypie,这不重要,但我希望尽可能详细地解释 首先,我定义了一个可分页集合: Entities.SimCollection = Backbone.PageableCollection.extend({ url: "api/sims/response/", mode: "infinite", state: { pageSize:

我完全被这件事困住了,弄不清楚为什么会发生这种事。我正在木偶应用程序中使用主干.Paginator。另外,对于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();
  });
然后我得到一个:
uncaughtrangeerror:超过了最大调用堆栈大小
,如果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"
    }
  });

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

在您的itemview中,您是否只是触发“itemview:sim:delete”或是否发生了其他任何事情,我的第一个猜测是,有什么东西正在侦听并触发同一事件。在本例中,销毁模型。

因此,我发现了这一点-他们在这里的键,至少对我来说,是在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中调用delete方法的。