2012-06-30 24 views
21

Tôi muốn truy cập app.vent từ Marionette.ItemView.Marionette.CompositeView, cách chuyển tham số cho Marionette.ItemView

Có thể tùy chọn có thể chuyển thông số (app.vent) đến Marionette.ItemView từ Marionette.CompositeView.

Ở đây mã của tôi:

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

Bất kỳ ý tưởng?

P.S .:
Tôi không thể truy cập ứng dụng từ mụcXem vì có sự cố phụ thuộc vòng tròn.

app -> view/compositeView -> view/itemView 

Trả lời

29

v0.9 thêm thuộc tính itemOptions có thể được sử dụng cho việc này. Nó có thể là một đối tượng theo nghĩa đen hoặc một hàm trả về một đối tượng theo nghĩa đen.



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

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

}); 

Tất cả các key: "value" cặp được trả về bởi thuộc tính này sẽ được cung cấp cho tùy chọn của itemview trong teh initializer


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

Ngoài ra, nếu bạn cần phải chạy mã cụ thể cho từng trường hợp itemView đó là được xây dựng, bạn có thể ghi đè phương thức buildItemView để cung cấp chế độ xem tùy chỉnh chế độ xem mục cho từng đối tượng trong bộ sưu tập.


    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; 
    }, 

Để biết thêm thông tin, xem:

+7

_itemViewOptions_ không được sử dụng nữa, bạn phải sử dụng _childViewOptions_ ngay bây giờ. – DiegoG

13

Vì Marionette v2.0.0, childViewOptions được sử dụng thay vì itemViewOptions để vượt qua các thông số đến xem con:

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}); 

Nhưng để làm việc với các sự kiện, cho phép sử dụng Marionette.Radio thay vì đi qua app.vent để xem.

Các vấn đề liên quan