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 回答