0

「entries/:id」URL にアクセスしたり、そこに移動したときに、ルーターからモデル値を警告することができません。しかし、コンソール ログには、正しい属性と値を持つ変数が表示されます。Chrome コンソールでデータをフェッチするようにテストしましたが、問題なく動作します。

私のルーターの内部:

class Raffler.Routers.Entries extends Backbone.Router
  routes:
    '': 'index'
    'entries/:id': 'show'

  initialize: ->
    @collection = new Raffler.Collections.Entries()
    @collection.reset($('#container').data 'entries')

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

  show: (id) ->
    entry = new Raffler.Models.Entry({id: id})
    entry.fetch()
    console.log(entry.get('title'))
    alert entry.get('name')
    console.log(entry)
    console.log(entry.attributes + " haha")
    viewsangat = new Raffler.Views.Page({model: entry})
    viewsangat.render()

私のモデル内:

class Raffler.Models.Entry extends Backbone.Model
  urlRoot: '/api/entries'

  win: ->
    @set(winner: true)
    @save()
    @trigger('highlight')

解決策: fetch からの値は、成功イベントの実行中/実行後にのみ使用できることがわかりました。そのため、次の行で get を使用しようとすると、期待どおりに値が返されない可能性があります。

4

1 に答える 1

1

一部のコンソールでは、フェッチ後にオブジェクトの値が表示されます。いずれにせよ、問題は afetch()が非同期であることです。

entry = new Raffler.Models.Entry({id: id})
entry.fetch()  #HERE IS YOUR ISSUE
alert entry.get('name')  #fetch has not yet returned

次のことを試してください。

entry = new Raffler.Models.Entry({id: id})
entry.fetch()  #HERE IS YOUR ISSUE
entry.on("reset") ->
  alert(entry.get('name'))  #fetch has not yet returned

それでもうまくいかない場合は、「リセット」を「変更」に変更してください。

ここでは、モデルのフェッチにonイベント バインディングを使用しています。

于 2012-04-19T09:08:07.090 に答える