0

我有一个木偶CompositeView,我用它来填写下拉列表。当我collection.fetch()从 CompositeView 中调用时,JSON 响应是干净的,但是CompositeView 似乎在 DOM中替换它们,而不是附加新的 ItemView。

这是我的代码(咖啡脚本):

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,并且项目视图不同的;不同的 cids 和适当的模型。

4

1 回答 1

0

我认为问题在于您使用 Backbone 的fetch操作。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 回答