Backbone和Rails重定向

时间:2012-08-02 02:46:42

标签: ruby-on-rails-3.1 backbone.js coffeescript

我是骨干和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)

1 个答案:

答案 0 :(得分: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视图:< / p>

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给您:

  

有几个特殊选项,如果通过,将直接附加到视图:model collection el,{{1} },idclassNametagName

强调我的。