0

バックボーンjsに問題があります。現在、json経由でバックボーンに情報を提供するレールアプリがあります。URLに移動するとjsonデータが表示されるため、これはすべて正しく機能しているようです。fetch メソッドを使用しているときに問題が発生しています。以下は私のコードです:

jQuery ->
  class Event extends Backbone.Model
    url: '/events/get_last'
    defaults:
      name: 'This isnt from the server'
      date_of: '2012-03-01'
      max_attendees: '300'

  class EventList extends Backbone.Collection
    url: '/events/get_events'
    model: Event

  class EventView extends Backbone.View
    el: $ 'body'
    model: Event
    initialize: (options) -> 
      _.bindAll @
      @event = new Event
      @event.fetch()
      @render()
    render: ->
      $(@el).append "<span>#{@event.get 'name'}"


  class EventRouter extends Backbone.Router
    routes : 
        '' : 'home'
        'dashboard' : 'render_data_view'
        'default' : 'default_view'
    home: -> 
      console.log "home"

    render_data_view: ->
      event_view = new EventView

    default_view: ->
      console.log 'the default view was hit'

    initialize: ->
      Backbone.history.start(pushState: true)

  event_router = new EventRouter
4

2 に答える 2

1

バックボーンドキュメントをご覧ください:http://documentcloud.github.com/backbone/#Model-fetch

model.fetch({
 success: function(model, response) {...}, 
 error: function(model, response) {...}
});

fetchメソッドにはsuccessメソッドとerrorメソッドを設定する必要があります。成功イベントを取得したら、render()を呼び出すことができます。

于 2012-04-26T17:17:26.557 に答える
1

EventView はそのモデルの"change"イベントにバインドする必要があるため、fetch自動的にトリガーされます。

フェッチ model.fetch([options])

[...]"change"サーバーの状態が現在の属性と異なる場合、イベントがトリガーされます。

したがって、ビューは次のようになります。

class EventView extends Backbone.View
  el: 'body'
  initialize: (options) ->
    @model = new Event
    @model.on 'change', @render
    @model.fetch() # This will call `render` automatically.
  render: =>
    @$el.append "<span>#{@model.get 'name'}</span>"

いくつかのメモ:

  1. bindAllCoffeeScriptを使用する必要はほとんどありません。代わりに太い矢印 ( =>)を使用してください。
  2. ビューのmodelプロパティは、インスタンスごとに単一のモデルに設定する必要があります (したがって、@event->@model名前が変更されます)。コレクションmodelはクラス定義でプロパティ セットを取得し@model、コレクションの はモデル クラスである必要があります。
  3. モデルのイベントにバインドするということは、誰かがモデルを変更するたびに"change"ビューが通知される (つまり、呼び出される) ことを意味します。このイベントの動作はバックボーンの要点のようなものなので、成功ごとのハンドラーとエラー ハンドラーを使用する必要があります。エラー処理とユーザーへの成功の報告のためのものです。@renderfetch
  4. <span>要素を閉じる必要があります。
  5. ビューには既に@$elあるので、代わりにそれを使用することもできます$(@el)
  6. el: 'body'代わりに使用el: $ 'body'して、jQueryification を Backbone に残すことができます。
  7. 古いバックボーンを使用している場合:
    1. bindの代わりに使用する必要がある場合がありonます。
    2. 持っていないかもしれない@$elので、$(@el)代わりに必要になるかもしれません。
于 2012-04-26T19:36:28.797 に答える