除了在javascript控制台中,rails on collection上的骨干不起作用

时间:2014-02-19 22:24:02

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

更新

忘记第一次尝试,在我的“另一次尝试”中,它适用于Firefox,但在谷歌浏览器中失败。原因似乎是firefox弹出警报允许集合有足够的时间来获取数据,在我删除警报后它再次返回0(而不是2)。似乎on('reset',..)被绕过


我是骨干新手并正在测试,所以我有

收集档案:

class Blog.Collections.Posts extends Backbone.Collection

  model: Blog.Models.Post

  url: '/bb/posts/list_posts'

模型文件:

class Blog.Models.Post extends Backbone.Model

路由器文件:

class Blog.Routers.Posts extends Backbone.Router
  routes: 'posts/list' : 'list'

  list: ->
    @collection = new Blog.Collections.Posts()
    @collection.fetch success: ->
       alert @collection
       view = new Blog.Views.PostsIndex()
       $('#center').html(view.render(posts: @collection).el)

查看文件:

 class Blog.Views.PostsIndex extends Backbone.View

   template: JST['posts/index']


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

模板文件只显示帖子的长度。所以当集合从/ bb / posts / list_posts url中获取json时,我应该等待它成功完成。但不知何故警报返回undefined ,模板渲染长度为0

另一次尝试:

路由器文件:

class Blog.Routers.Posts extends Backbone.Router
  routes: 'posts/list' : 'list'

  list: ->
    @collection = new Blog.Collections.Posts()
    @collection.fetch()
    view = new Blog.Views.PostsIndex(collection: @collection)
    $('#center').html(view.render().el)

查看文件:

 class Blog.Views.PostsIndex extends Backbone.View

   template: JST['posts/index']

   initialize: ->
     @collection.on('reset',@render,this)
     alert @collection.length

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

这一次,我得到警告@collection返回Object [Object],但它的长度为0。

fetch在javascript控制台中运行FINE,长度为2.为什么不起作用?

1 个答案:

答案 0 :(得分:2)

在这里找到解决方案

Backbone.js - fetch method does not fire reset event

事实证明,“重置”事件的问题从未被解雇过。正如链接中指出的那样,fetch({reset:true})解决了问题,而不是fetch()。 :)