2013-06-21 42 views
3

情況是這樣的:我有一個collectionView在幾個地方使用。我在視圖中傳入了一些選項來改變某些顯示方面(主要是措辭),因爲行爲在任何地方都完全相同。Backbone Marionette:我可以向collectionView的emptyView提供選項嗎?

我真的很想把這個定製擴展到emptyView,但是我找不到這樣做的方法。似乎沒有提及emptyView上的collectionView,在定義它之外,我似乎也無法從collectionView訪問emptyView

基本上,我希望能夠做這樣的事情:

var noItemsView = Backbone.Marionette.ItemView.extend({ 
    tagName: "li", 
    className: "no-results", 
    template: Handlebars.compile(noResultsTemplate), 
}), 

leftToggleListView = Backbone.Marionette.CollectionView.extend({ 
    tagName: "ul", 
    className: "left-toggle-view-list", 
    emptyView: noItemsView, 

    initialize: function() { 
     this.emptyView.model.set("name": "some custom name"); 
    } 
}); 

,然後讓noItemsView能夠將其模板內作出{{ name }}

有沒有什麼辦法可以做到這一點,短暫修改木偶?

+0

我已經更新了一個答案,通過添加一個鏈接到拉動請求,可能對你有用,如果你的問題仍然相關。 –

回答

3

在可以使用buildItemView中的CollectionView,此功能也將被稱爲當時建emptyView

我的jsfiddle http://jsfiddle.net/rayweb_on/TN34P/

var leftToggleListView = Backbone.Marionette.CollectionView.extend({ 
tagName: "ul", 
className: "left-toggle-view-list", 
emptyView: noItemsView, 
ValuethatMakesSense : "I do!", 
buildItemView: function(item, ItemViewType, itemViewOptions){ 
    var options = _.extend({model: item}, itemViewOptions); 
    var name = this.ValuethatMakesSense; 
    var view = new ItemViewType({name : name}); 
    return view; 
} 
}); 

而且在初始化函數做了一個小小的演示您可以閱讀通過的選項。

var noItemsView = Backbone.Marionette.ItemView.extend({ 
initialize : function (options) { 
    var name = this.options.name; 
    console.log(name); 
}, 

tagName: "li", 
className: "no-results", 
template: "#noresults" 
}); 

即時通訊使用的CollectionView內的屬性,然後閱讀它/它傳遞給在buildItemView空的觀點只是爲了測試buildItemView函數的功能,你可以做適當的邏輯檢查和驗證那裏。

+1

我今天在這裏結束了,因爲我正在嘗試實現類似的事情......看起來像木偶已經寫了一些變化,並且上面的解決方案不再起作用。我試圖更新提供的代碼@Rayweb_on - TL; DR:它不起作用。這是我的版本:http://jsfiddle.net/alexweber/ka1odwxn/ –

相關問題