2015-06-06 92 views
0

我有一個Marionette(2.4.1)CompositeView,當我做一個排序它重新呈現整個視圖,而不是childView。標題圖標恢復。我可以在渲染上修復它們,但有沒有辦法讓我可以渲染childView?Marionette CompositeView排序渲染

diaryEntries = Backbone.Marionette.CompositeView.extend({ 
    template : diaryEntries, 
    className: 'diary-entries', 
    collection: new Diary(), 
    childViewContainer: 'tbody', 
    reorderOnSort: true, 

    events: { 
    'click th[data-sort]': 'sort', 
    'click .pagination a': 'paginate' 
    }, 

    initialize: function() { 
    this.itemsPerPage = 5; 
    this.currentPage = 1; 
    this.pages; 
    }, 

    ... 

    sort: function(e) { 
    var $th, dir, sort, sorted; 
    e.preventDefault(); 
    $th = $(e.currentTarget); 
    sort = $th.data('sort'); 

    if (sort === this.collection.sortField) { 
     this.collection.sortDirection *= -1; 
    } else { 
     this.collection.sortDirection = 1; 
    } 

    this.collection.sortField = sort; 

    $('span.glyphicon').removeClass('active-sort'); 
    $th.siblings('th').find('span.glyphicon').removeClass('glyphicon-chevron-down glyphicon-chevron-up').addClass('glyphicon-sort'); 

    if (this.collection.sortDirection === 1) { 
     $th.find('span.glyphicon').removeClass('glyphicon-chevron-down glyphicon-sort').addClass('glyphicon-chevron-up active-sort'); 
    } else { 
     $th.find('span.glyphicon').removeClass('glyphicon-chevron-up glyphicon-sort').addClass('glyphicon-chevron-down active-sort'); 
    } 

    this.collection.sort(); 
    }, 
... 

}); 

回答

2

好吧,看起來像木偶一樣關心你是同樣的事情。我無法在文檔中找到它,但在源代碼中很明顯。如果您通過此選項:

reorderOnSort: true 

到您的收藏/綜合來看,在'sort'事件集合/視圖不會重新渲染,只是它的孩子。

請參閱本線木偶來源:https://github.com/marionettejs/backbone.marionette/blob/v2.4.1/src/collection-view.js#L166

UPDATE如果你過濾你的孩子的意見,針對您的收藏排序將調用render在收集/ CompositeView中。邏輯是,如果您要爲您的子女結果進行分頁,則必須對原始未過濾的收藏進行排序以正確顯示分頁結果。

儘管如此,我沒有看到任何東西本質上錯誤的分頁篩選集。

幸運的是,它很容易覆蓋sort方法來呈現您的結果是否被過濾。在你收集/ CompositeView中包括這種方法:

reorder: function() { 
    var children = this.children; 
    var models = this._filteredSortedModels(); 

    // get the DOM nodes in the same order as the models 
    var els = _.map(models, function(model) { 
    return children.findByModel(model).el; 
    }); 

    this.triggerMethod('before:reorder'); 
    this._appendReorderedChildren(els); 
    this.triggerMethod('reorder'); 
    } 
}, 
+0

總是一件好事閱讀代碼。 – billjamesdev

+0

我已經設置好了。它不起作用。 – jabbermonkey

+0

你正在篩選你的清單嗎? – seebiscuit

相關問題