Backbone.js 主干提线木偶:合成视图替换项目,而不是附加项目
我有一个木偶Backbone.js 主干提线木偶:合成视图替换项目,而不是附加项目,backbone.js,marionette,Backbone.js,Marionette,我有一个木偶CompositeView,我用它来填充下拉列表。当我从CompositeView中调用collection.fetch()时,JSON响应是干净的,但是CompositeView似乎在DOM中取代了新的ItemView,而不是附加新的ItemView 这是我的代码(咖啡脚本): 以及调用获取的父布局: class @IndexLayout extends Backbone.Marionette.Layout initialize: -> @collec
CompositeView
,我用它来填充下拉列表。当我从CompositeView中调用collection.fetch()
时,JSON响应是干净的,但是CompositeView似乎在DOM中取代了新的ItemView,而不是附加新的ItemView
这是我的代码(咖啡脚本):
以及调用获取
的父布局:
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
调用手动附加这些项,但我得到了相同的行为。我可以在@PDCollectionsView
上通过调用onafteritemsadded
来记录每个项目视图
,并且项目视图是不同的;不同的CID和相应的型号。我认为问题在于您使用主干网的获取操作fetch
“同步”集合及其在服务器上的状态。在不指定任何自定义项的情况下,它将智能地添加新项目、更新更改的项目以及删除服务器上不再存在的项目。我猜想,如果在调用fetch之后检查集合,您将看到它只包含正在CompositeView中呈现的项
通过传递{remove:false}
,您可以修改fetch
的行为以同步到服务器,而无需删除任何内容。这将产生您想要的结果:
@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
不幸的是,这并没有解决问题。添加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