尝试使用CollectionView的Backbone.Marionette投掷错误

时间:2013-08-17 01:06:23

标签: backbone.js marionette backbone-views backbone-collections

我陷入了一个非常恼人的问题,并决定寻求帮助,因为错误很难弄明白。

我在一个页面应用程序中有一个Marionette Layout视图,表示切换出来的面板。我有它工作正常,直到我尝试添加CollectionView作为布局的孩子。我做错了,但我得到的错误不是很有帮助。

我收到此错误:

Uncaught TypeError: undefined is not a function backbone.marionette.js:1240
Marionette.CollectionView.Marionette.View.extend._initChildViewStorage backbone.marionette.js:1240
Marionette.CollectionView.Marionette.View.extend.constructor backbone.marionette.js:1014
child backbone.js:1531
Marionette.Layout.extend.initialize

我无法弄清楚在这种情况下我需要定义什么功能。

这是我的页面'布局(因为它位于require包装器中)

    return Marionette.Layout.extend({
        template: Template,
        className: "page",

        initialize: function(options) {
            this.collection = new DataSet();
            this.collection.fetch();                                        

            // ADD THE VIEW
            var dataview = new DrinkCollectionView( { collection:this.collection } );

            // SHOW THE VIEW
            this.content.show( dataview );

        },

        regions: {
            content: "#page-content"
        },

    });

这是我正在尝试使用的CollectionView。我把它煮到了最低限度,试图让它运转起来没有运气。

    return Marionette.CollectionView.extend({
        collection: MyDataSet,
        itemView: MyItemView,
    });

我认为我在init方法中创建东西时出错了,但我不确定这样做的正确方法是什么。

非常感谢任何帮助。

谢谢, ģ

2 个答案:

答案 0 :(得分:0)

mu is too short如何说,很难说这里发生了什么。无论如何,在你定义Marionette.Layout之前,试着看看你是否定义了Template之类的变种,同样在Marionette.CollectionView

答案 1 :(得分:0)

我看到两件事:

1)不确定您返回'Marionette.Layout.extend'的用例 假设您稍后将使用“new”创建一个对象? 这意味着你应该具有相同的

var MyLayout = Marionette.Layout.extend {...}
var _myLayout = new MyLayout ();

2)该区域应该在'onRender'内呈现:

onRender: function() {
  // SHOW THE VIEW
  this.content.show( new DrinkCollectionView( { collection:this.collection } ) );

}