0

CompositeViewドロップダウンに入力するために使用しているマリオネットがあります。collection.fetch()CompositeView 内から呼び出したときの JSON 応答はきれいですが、新しい ItemViewを追加する代わりに、CompositeViewが DOM でそれらを置き換えているようです。

これが私のコードです(coffeescript):

class @PDCollectionItemView extends Backbone.Marionette.ItemView
    el: 'li'
    template: Handlebars.compile('{{ title }}')

class @PDCollectionsView extends Backbone.Marionette.CompositeView
    id: 'pd_collections'
    className: 'selection'
    itemView: PDCollectionItemView
    itemViewContainer: '.scroll ul'
    template: HandlebarsTemplates['connections/collection_select'] #handlebars_assets gem

    ui:
        modalTrigger: '#pd_collection_selector'
        modal : '#pd_selection_modal'
        selectBtn : '#select_collection'

    initialize: ->
        @selectedCollection = undefined
        Connectors.App.vent.on "connections:collectionStaged", @assignSelectedCollection

return @PDCollectionsView

が呼び出される親レイアウトfetch:

class @IndexLayout extends Backbone.Marionette.Layout
    initialize: ->
        @collections = new PDCollectionsCollection
        @collectionsView = new PDCollectionsView
            collection: @collections

    onRender: ->
        @collectionSelect.show @collectionsView

        @collections.fetch
            success: (collection, response, options) =>
                Connectors.App.vent.trigger "connections:collectionsLoaded"
                Connectors.App.vent.trigger "loadComplete"

            error: (collection, response, options) =>
                console.log response

appendHTML呼び出しで項目を手動で追加しようとしましたが、同じ動作になります。itemViewを呼び出してそれぞれをonAfterItemAddedログに記録できます。@PDCollectionsView項目ビュー個別です。さまざまなcid、および適切なモデル。

4

1 に答える 1

0

fetchBackbone の操作の使い方に問題があると思います。fetchコレクションをサーバー上の状態と「同期」します。カスタマイズを指定しなくても、新しいアイテムをインテリジェントに追加し、変更されたアイテムを更新し、サーバー上になくなったアイテムを削除します。fetch を呼び出した後にコレクションを調べると、CompositeView でレンダリングされているアイテムのみが取得されていることがわかると思います。

fetchを渡すことで、何も削除せずにサーバーと同期するように の動作を変更できます{remove: false}。これにより、探している結果が得られるはずです。

    @collections.fetch
        remove: false

        success: (collection, response, options) =>
            Connectors.App.vent.trigger "connections:collectionsLoaded"
            Connectors.App.vent.trigger "loadComplete"

        error: (collection, response, options) =>
            console.log response
于 2013-08-24T18:40:33.940 に答える