即使在获取成功中,Rails + Backbone Model也是未定义的

时间:2012-12-14 05:37:37

标签: ruby-on-rails backbone.js coffeescript

我只是尝试.get一个属性并将其显示在Rails,Backbone,Coffeescript应用程序中的html元素中,但结果始终是undefined在控制台中。此代码的错误是:

  

未捕获的TypeError:无法读取未定义的属性“长度”

目标是让一个仪表板显示各种面板。我在过去的4小时内尝试了以下代码的大约50种变体:\你能帮忙吗?

骨干路由器:

class App.Routers.Dashboard extends Backbone.Router

routes:
    '': 'index'

initialize: ->
    preflist = new App.Models.Preflist()
    preflist.fetch success: ->
        paneloneview = new App.Views.PanelOne(model: preflist)
        $('#panel-one').html(paneloneview.render().el)

主干视图:

class App.Views.PanelOne extends Backbone.View

    template: JST['dashboard/panel_one']

    render: ->
        $(@el).html(@template(@model))
        this

模板文件:

<h1>Panel One</h1>

<p><%= @model.length %></p> 

2 个答案:

答案 0 :(得分:1)

您可能希望将渲染函数传递给对象(尽管这只是一个有根据的猜测)。

也许:

render: ->
  $(@el).html(@template({model: @model}))
  this

// and in an eco template

<h1>Panel 1</h1>
<p><%= @model.length %></p>

答案 1 :(得分:0)

我明白了。我只需要睡在它上面,然后再观看Backbone RailsCast。谢谢大家的帮助!正确的代码是:

class App.Routers.Dashboard extends Backbone.Router

routes:
    '': 'index'

initialize: ->
    preflist = new App.Models.Preflist()
    preflist.fetch success: ->
        paneloneview = new App.Views.PanelOne(model: preflist)
        $('#panel-one').html(paneloneview.render().el)


class App.Views.PanelOne extends Backbone.View

    template: JST['dashboard/panel_one']

    render: ->
        $(@el).html(@template(preflist: @model))
        this



<h3>Panel One</h3>

<p><%= @preflist.get('panel_one') %></p>