Ruby on rails 主干js模型/控制器将json数据分配给变量
我在学习上有点困难。目前,我有一个rails应用程序,它通过json向主干网提供信息。看起来这一切都正常运行,因为当我导航到URL时,会显示json数据。我在使用fetch方法时遇到困难。下面是我的代码: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:
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'}”
请注意:
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>"