1

私はバックボーンとレールが初めてです。最後の行のインデックス ビューに戻ると、作成された新しい値でインデックス ビューが更新されません。

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

2 つの異なる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追加し、ルーターはそれをビューに渡します:@collectionProfilesNew@collectionProfilesIndex

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

コレクションは 1 つだけにする必要があると思います。ルーターにあるコレクションです。次に、それをProfilesNewビューに渡します。

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

initializeからメソッドを削除しProfilesNewます。ビューはオプションを次のinitializeようにコピーします:collection@collection

渡された場合、ビューに直接アタッチされる特別なオプションがいくつかあります: modelcollectionelid、および。classNametagNameattributes

鉱山を強調します。

于 2012-08-03T03:03:40.533 に答える