Estou ficando preso em uma questão bastante irritante e decidi procurar ajuda, pois é difícil descobrir o erro.
Eu tenho uma exibição de layout de marionete em uma única páginaaplicativo que representa o painel que muda. Eu funciono bem até tentar adicionar um CollectionView como filho do layout. Estou fazendo algo errado, mas o erro que recebo não ajuda muito.
Estou recebendo este erro:
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
Não consigo descobrir qual função preciso definir neste caso.
Aqui está o layout da minha "página" (como fica no wrapper de solicitação)
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"
},
});
Este é o meu CollectionView que estou tentando usar. Eu o reduzi ao mínimo para tentar fazer com que isso funcionasse sem sorte.
return Marionette.CollectionView.extend({
collection: MyDataSet,
itemView: MyItemView,
});
Suponho que estou fazendo algo errado ao criar coisas no método init, mas não tenho certeza de qual é a maneira correta de fazer isso.
Qualquer ajuda seria muito apreciada.
Obrigado, G
Respostas:
0 para resposta № 1Como mu is too short
disse, é difícil dizer o que está acontecendo aqui. Enfim, tente olhar se você definir vars como Template
antes disso, você define Marionette.Layout, o mesmo em Marionette.CollectionView
0 para resposta № 2
Duas coisas que eu vejo:
1) Não tenho muita certeza do seu caso de uso de retornar "Marionette.Layout.extend" Suponha que você criará um objeto usando "novo" posteriormente? Significando que você deve ter o equivalente a
var MyLayout = Marionette.Layout.extend {...}
var _myLayout = new MyLayout ();
2) A região deve ser renderizada dentro de "onRender":
onRender: function() {
// SHOW THE VIEW
this.content.show( new DrinkCollectionView( { collection:this.collection } ) );
}