1

我是主干和 Rails 的新手。当我返回最后一行的索引视图时,索引视图不会使用创建的新值进行更新。

class App.Views.ProfilesIndex extends Backbone.View
template: JST['profiles/index']

initialize: ->
    @collection.on('reset', @render, this)

render: ->
    $(@el).html(@template(profiles: @collection))
    this

这是我的新视图代码

class App.Views.ProfilesNew extends Backbone.View
template: JST['profiles/new']

initialize: ->
    @collection = new App.Collections.Profiles()

events: ->
    'submit #new_profile': 'createProfile'

render: ->
    $(@el).html(@template())
    this

createProfile: (event) ->
    event.preventDefault()
    attributes = name: $('#new_profile_name').val()
    @collection.create attributes,
        success: -> Backbone.history.navigate("/profiles", {trigger: true})

因此,我需要在创建新元素并将其返回到索引视图时更新集合。

路由器

class App.Routers.Profiles extends Backbone.Router
routes:
    'profiles': 'index'
    'profiles/new': 'new'

initialize: ->
    @collection = new App.Collections.Profiles()
    @collection.fetch()

index: ->
    view = new App.Views.ProfilesIndex(collection: @collection)
    $('#container').html(view.render().el)
    
new: ->
    view = new App.Views.ProfilesNew()
    $('#container').html(view.render().el)
4

1 回答 1

1

你有两个不同的App.Collections.Profiles集合。您的路由器有一个:

class App.Routers.Profiles extends Backbone.Router
    #...
    initialize: ->
        @collection = new App.Collections.Profiles()

你的ProfilesNew观点有它自己的:

class App.Views.ProfilesNew extends Backbone.View
    #...
    initialize: ->
        @collection = new App.Collections.Profiles()

您的createProfile方法将新配置文件添加到@collection视图中ProfilesNew,然后路由器将其@collection交给ProfilesIndex视图:

index: ->
    view = new App.Views.ProfilesIndex(collection: @collection)
    $('#container').html(view.render().el)

我认为你应该只有一个集合:路由器中的那个。然后将其交给ProfilesNew视图:

new: ->
    view = new App.Views.ProfilesNew(collection: @collection)
    $('#container').html(view.render().el)

并从中删除该initialize方法ProfilesNew。视图initialize将为您复制collection选项@collection

有几个特殊选项,如果通过,将直接附加到视图:modelcollectionelidclassName和。tagNameattributes

强调我的。

于 2012-08-03T03:03:40.533 回答