Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 主干js模型/控制器将json数据分配给变量_Ruby On Rails_Backbone.js_Coffeescript - Fatal编程技术网

Ruby on rails 主干js模型/控制器将json数据分配给变量

Ruby on rails 主干js模型/控制器将json数据分配给变量,ruby-on-rails,backbone.js,coffeescript,Ruby On Rails,Backbone.js,Coffeescript,我在学习上有点困难。目前,我有一个rails应用程序,它通过json向主干网提供信息。看起来这一切都正常运行,因为当我导航到URL时,会显示json数据。我在使用fetch方法时遇到困难。下面是我的代码: jQuery -> class Event extends Backbone.Model url: '/events/get_last' defaults: name: 'This isnt from the server' date_of:

我在学习上有点困难。目前,我有一个rails应用程序,它通过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
jQuery->
类事件扩展了主干.Model
url:“/events/get_last”
默认值:
名称:'这不是来自服务器'
日期:2012-03-01
最大出席人数:“300”
类EventList扩展了主干集合
url:“/events/get_events”
模型:事件
类EventView扩展了主干
el:$‘body’
模型:事件
初始化:(选项)->
_宾德尔先生@
@事件=新事件
@event.fetch()
@render()
渲染:->
$(@el).append“#{@event.get'name'}”
类EventRouter扩展主干。路由器
路线:
“家”
“仪表板”:“渲染数据视图”
“默认”:“默认视图”
首页:->
console.log“主页”
渲染数据视图:->
事件视图=新事件视图
默认视图:->
console.log“命中默认视图”
初始化:->
主干.history.start(pushState:true)
事件路由器=新的事件路由器

看看主干文档:


应该为fetch方法设置success和error方法。获得成功事件后,可以调用render()

您的EventView应该绑定到其模型的
“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>"
class EventView扩展了主干
艾尔:“身体”
初始化:(选项)->
@模型=新事件
@model.on“change”,@render
@model.fetch()#这将自动调用'render'。
渲染:=>
@$el.append“#{@model.get'name'}”
请注意:

  • 您很少需要与CoffeeScript一起使用,请改用
  • 视图上的
    model
    属性应按实例设置为单个模型(因此
    @event
    ->
    @model
    名称更改)。集合在类定义中获取其
    model
    属性集,并且集合的
    @model
    应为模型类
  • 绑定到模型上的
    “change”
    事件意味着每当有人更改模型时,都会通知您的视图(即调用
    @render
    ),此事件行为在某种程度上是整个主干点,因此您应该使用它,per-
    fetch
    success和error handlers更多地用于错误处理和向用户报告成功
  • 您确实应该关闭
    元素
  • 该视图已经存在,因此您最好使用它而不是
    $(@el)
  • 您可以使用
    el:'body'
    而不是
    el:$'body'
    并将jquery化留给主干
  • 如果您使用的是较旧的主干,则:
  • 您可能必须在上使用
    绑定
    而不是
  • 您可能没有
    @$el
    ,因此可能需要使用
    $(@el)

  • 我真的很感激这个详细的回答。非常感谢!
    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>"