2012-06-30 24 views
21

app.vent dosyasına Marionette.ItemView'den erişmek istiyorum.Marionette.CompositeView, parametrelerin Marionette.ItemView'a nasıl geçirileceği

Belki de Marionette.CompositeView numaralı telefondan Marionette.ItemView parametresine bir parametre (app.vent) iletilmesi bir seçenek olabilir. İşte

kodum:

// view/compositeView.js 
define([ 
    'marionette', 
    'views/item' 
], function (Marionette, itemView) { 
    var ListView = Marionette.CompositeView.extend({ 
     itemView: itemView 
    }); 
}); 

Herhangi bir fikir?

S.S .:
Öğeye, öğeden erişilemiyorum çünkü dairesel bağımlılık sorunu var.

app -> view/compositeView -> view/itemView 

cevap

29

v0.9 Bunun için kullanılabilecek bir itemOptions özelliği ilave edildi. Bir nesne değişmezi ya da bir nesne değişmezini döndüren bir işlev olabilir.



Backbone.Marionette.CompositeView.extend({ 
    itemView: MyItemViewType, 

    itemViewOptions: { 
    some: "option", 
    goes: "here" 
    } 

}); 

Eğer her itemView örneği için özel kodu çalıştırmak gerekiyorsa,


Backbone.Marionette.ItemView.extend({ 
    initialize: function(options){ 
    options.some; //=> "option" 
    options.goes; //=> "here" 
    } 
}); 

Ayrıca teh in başlatıcısı itemview en seçeneklerine sağlanacaktır Bu özniteliği tarafından döndürülen key: "value" çiftlerinin tüm Oluşturulmuş, koleksiyondaki her nesne için öğe görünümünün özel oluşturulmasını sağlamak için buildItemView yöntemini geçersiz kılabilirsiniz.


    buildItemView: function(item, ItemView){ 

    // do custom stuff here 

    var view = new ItemView({ 
     model: item, 
     // add your own options here 

    }); 

    // more custom code working off the view instance 

    return view; 
    }, 

fazla bilgi için, bkz:

yanı CompositeView için geçerlidir, yani CompositeView CollectionView uzanır dikkat
+7

_itemViewOptions_ artık kullanılmıyor, şimdi _childViewOptions_ kullanmanız gerekiyor. – DiegoG

13

Marionette v2.0.0'dan beri, childViewOptions çocuk görünümüne parametreleri geçirmek için itemViewOptions yerine kullanılır:

etkinlikleriyle çalışacak Ama
var MyCompositeView = Marionette.CompositeView.extend({ 
    childView: MyChildView, 
    childViewOptions: function(model, index) { 
    return { 
     vent: this.options.vent 
    } 
    } 
}); 

var MyChildView = Marionette.ItemView.extend({ 
    initialize: function(options) { 
     // var events = options.vent; 
    } 
}); 

new MyCompositeView({ vent: app.vent, collection: myCollection}); 

yerine görünümüne app.vent geçme Marionette.Radio kullanmanızı sağlar.

İlgili konular