0

Backbone.Marionette.CollectionView で Backbone.Collection をリセットするたびに、IE8 がエラーをスローします。

Function.prototype.apply: 引数が null または未定義です

同じケースが 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);
    }
  }
});

Handlebars テンプレートを使用して、単純な可能な CollectionView を使用しています。

  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);
  }
});
4

2 に答える 2

3

これは Marionette のバグであることが判明し.apply、null または未定義のargumentsパラメーターで呼び出しました。

これを修正するためにマリオネットとその依存関係が更新されましたが、修正は開発ブランチにはありません (このチケットを参照してください: https://github.com/marionettejs/backbone.marionette/issues/368 )。

この修正がすぐに必要な場合は、devブランチから marionette ビルドを取得する必要があります: https://github.com/marionettejs/backbone.marionette/tree/dev/lib

「コア」ビルドを使用している場合は、必ず Wreqr と EventBinder も更新してください。BabySitter は更新の必要がありませんでした。

于 2012-12-06T18:48:34.560 に答える
2

すべてのオブジェクトにコンマが含まれていないことを確認してください。

ie8err: { something: 1, something: 2, } //Error in IE8 and below.

断言はできませんが、そうかもしれない匂いがします。

于 2012-12-06T16:15:05.513 に答える