我是骨干和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)
答案 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} },id
,className
和tagName
。
强调我的。