Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js Marionette.js:CompositeView:getItemView始终返回';未定义';初始化时_Backbone.js_Marionette - Fatal编程技术网

Backbone.js Marionette.js:CompositeView:getItemView始终返回';未定义';初始化时

Backbone.js Marionette.js:CompositeView:getItemView始终返回';未定义';初始化时,backbone.js,marionette,Backbone.js,Marionette,我有一个compositeView和ItemView,如下所示(我的视图的简化版本): testView1=Backbone.marionete.ItemView.extend({ 模板:“#测试视图-1” } testView2=Backbone.marionete.ItemView.extend({ 模板:“#测试视图-2” } TestView=Backbone.marionete.CompositeView.extend({ 模板:“#测试模板”, itemViewContainer:'

我有一个compositeView和ItemView,如下所示(我的视图的简化版本):

testView1=Backbone.marionete.ItemView.extend({
模板:“#测试视图-1”
}
testView2=Backbone.marionete.ItemView.extend({
模板:“#测试视图-2”
}
TestView=Backbone.marionete.CompositeView.extend({
模板:“#测试模板”,
itemViewContainer:'tbody',
itemView:testView1,
getItemView:函数(项){

console.log('item');//我在代码中尝试使用您的自定义getItemView函数,得到了相同的行为

跟踪调用似乎在CompositeView的构造函数中调用了一次getItemView,以将传递给CompositeView对象的itemView分配给:
this.itemView=this.getItemView();


因此,我认为在返回正确的itemView实例之前检查是否传递了一个项是正确的。

这只是猜测,但可能是在从服务器完全获取集合之前将其传递给复合视图构造函数?@Ingro,CollectionView是从
success:function()创建的
我的集合获取。在问题出现时,集合已经完成。我希望我的集合中有100个模型,这就是我得到的,但是
getItemView
被激发了101次。感谢您的输入。我同意执行
if
条件是正确的操作,并且它在有条件时运行良好g此检查。但是,对我来说,在CompositeView开始迭代传入的模型之前,我看不到调用
getItemView
的必要性。这似乎是木偶库中的一个缺陷。我将保留我的检查,不管它看起来多么“黑客”。感谢您花时间研究此问题。@Ingro
testView1 = Backbone.Marionette.ItemView.extend({
    template: '#test-view-1'
}
testView2 = Backbone.Marionette.ItemView.extend({
    template: '#test-view-2'
}

TestView = Backbone.Marionette.CompositeView.extend({
    template: '#test-template',
    itemViewContainer:'tbody',
    itemView: testView1,
    getItemView: function(item){
        console.log('item');        //<==== FIRED 101 TIMES
        if (!item) {                //<==== WHY DO I NEED THIS
            return testView1;       //<==== WHY DO I NEED THIS
        } else {
            return ('testView' + item.id);
        }
    }
});