javascript - Backbone.Collection.reset() 在 IE8 中抛出异常

标签 javascript internet-explorer backbone.js coffeescript marionette

每次我在 Backbone.Marionette.CollectionView 中重置 Backbone.Collection 时,IE8 都会抛出错误:

Function.prototype.apply: argument is null or undefined

同样的情况也适用于emptyView。

我的CoffeeScript代码(下面是js版本):

Collection = Backbone.Collection.extend
url       : '/videos.json'
baseModels: []
initialize : -> 
  GIS.VL.vent.on 'specialization:selected', @onSpecializationSelected, @
  @on 'reset', @onFirstSync, @

onFirstSync : (a)->
  @off 'reset', @onFirstSync, @
  @baseModels = @models
  console.log @models

onSpecializationSelected : (model)-> 
  if model.id < 0
    @reset @baseModels
  else
    filteredItems = _.filter @baseModels, (item)->
      specializations = _.map item.get('specializations'), (specialization) ->
        specialization.id 
      -1 < _.lastIndexOf specializations, model.id
    @reset filteredItems

Javascript版本:

var Collection;

Collection = Backbone.Collection.extend({
  url: '/videos.json',
  baseModels: [],
  initialize: function() {
    GIS.VL.vent.on('specialization:selected', this.onSpecializationSelected, this);
    return this.on('reset', this.onFirstSync, this);
  },
  onFirstSync: function(a) {
    this.off('reset', this.onFirstSync, this);
    this.baseModels = this.models;
    return console.log(this.models);
  },
  onSpecializationSelected: function(model) {
    var filteredItems;
    if (model.id < 0) {
      return this.reset(this.baseModels);
    } else {
      filteredItems = _.filter(this.baseModels, function(item) {
        var specializations;
        specializations = _.map(item.get('specializations'), function(specialization) {
          return specialization.id;
        });
        return -1 < _.lastIndexOf(specializations, model.id);
      });
      return this.reset(filteredItems);
    }
  }
});

我正在使用尽可能简单的 CollectionView,以及 Handlebars 模板:

  VideosView = Backbone.Marionette.CollectionView.extend
    tagName   : 'div'
    itemView  : VideoView
    collection: new Collection
    config: 
      itemsPerPage: 3

    initialize: (options)->
      console.log 'initialize'

      # override defaults:
      @config           = _.extend @config, options

Javascript 版本如下:

var VideosView;

VideosView = Backbone.Marionette.CollectionView.extend({
  tagName: 'div',
  itemView: VideoView,
  collection: new Collection,
  config: {
    itemsPerPage: 3
  },
  initialize: function(options) {
    console.log('initialize');
    return this.config = _.extend(this.config, options);
  }
});

最佳答案

事实证明,这是 Marionette 中的一个错误,使用 null 或未定义的 arguments 参数调用 .apply

Marionette 及其依赖项已更新以修复此问题,并且该修复不在开发分支中(请参阅此票证:https://github.com/marionettejs/backbone.marionette/issues/368)。

如果您立即需要此修复,则需要从 dev 分支获取 marionette 版本:https://github.com/marionettejs/backbone.marionette/tree/dev/lib

如果您使用“核心”版本,请务必同时更新 Wreqr 和 EventBinder。 BabySitter 不需要任何更新。

关于javascript - Backbone.Collection.reset() 在 IE8 中抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13745771/

相关文章:

javascript - 如何在客户端脚本中导入实用方法

javascript - Chrome 扩展程序的内容脚本如何确定注入(inject)页面的引荐来源网址?

javascript - 如何使 $ (":text[placeholder]"在 IE 中工作

javascript - Backbone.js无法访问路由器功能?

javascript - 排序后 Backbone 集合不刷新

backbone.js - 如何在 Backbone.js v0.5 中构建深度嵌套的模型

c# - 通过 Javascript 从代码隐藏访问全局静态变量

javascript - 如果 api 的响应为 false,如何停止 for 循环?

jquery - IE9 简单的点击/滚动问题

internet-explorer - 更好的 IE 开发工具(有限制)