backbone.js 将模型集合传递到Marionette中的CollectionView时,无法读取未定义错误的属性'length'

cidc1ykv  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(141)

我在Backbone/Marionette中工作,并有一个Collection,我在其中解析数据,并创建一个模型集合,然后将其传递给一个CollectionView,并为该CollectionView设置一个childView。
集合成功进入CollectionView,但当我的应用程序尝试显示childView时,似乎得到了Uncaught TypeError: Cannot read property 'length' of undefined
在Marionette中抛出的错误如下:

_filteredSortedModels: function(addedAt) {
      var viewComparator = this.getViewComparator();
      var models = this.collection.models;
      addedAt = Math.min(Math.max(addedAt, 0), models.length - 1);

这里似乎没有定义“模型”。
我的应用程序是这样设置的:
抽屉收藏:

App.module('Home.Drawer.Collections', function (Collections, App, Backbone, Marionette) {
 model: App.Home.Drawer.Models.DrawerModel,
    ...make a request, parse some data...

 responseData.push( new App.Home.Drawer.Models.DrawerModel({

     ...model properties...
});

 var DrawerLayoutCollection = new App.Home.DrawerCollectionView({collection: responseData});
App.mainContainer.show(shelfLayoutCollection);

抽屉视图:

App.module('Home', function(Home, App, Backbone, Marionette) {
Home.DrawerComponent = Backbone.Marionette.LayoutView.extend({
 ...my template, events, ui, etc....
});

});

集合视图(DrawerView设置为它的childView):

Home.DrawerCollectionView = Backbone.Marionette.CollectionView.extend({
        childView: Home.DrawerComponent

    });

任何意见都将不胜感激!!!

2vuwiymt

2vuwiymt1#

这一行似乎有几处不对:

var DrawerLayoutCollection = new App.Home.DrawerCollectionView({collection: responseData});

首先,DrawerLayoutCollection不是一个构造函数,而是一个示例;其次,它被称为一个 * 集合 *,但实际上它是一个视图示例。
您正在将responseData作为集合而不是实际的 Backbone.js 集合传递给集合视图。
应该是这样的

var drawerLayoutCollectionView = new App.Home.DrawerCollectionView({collection: new Backbone.Collection(responseData)});

相关问题