Backbone fetch collection + Rails

时间:2013-12-11 10:14:46

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

js文件:

class BackApp.Collections.Posts extends Backbone.Collection
  url: '/api/posts'
  model: BackApp.Models.Post

class BackApp.Models.Post extends Backbone.Model

class BackApp.Routers.Posts extends Backbone.Router
  routes:
    '': 'index'
  initialize: ->
    @collection = new BackApp.Collections.Posts
    @collection.fetch()
  index: ->
    #view = new BackApp.Views.PostsIndex(collection: @collection)
    #$("#container").html(view.render().el)

rails routes:

  scope "api" do
    resources :posts
  end
  root :to => 'main#index'

所以,当我在chrome控制台中尝试获取集合时,如:

collection = new BackApp.Collections.Posts
collection.fetch()
collection.length # => 3

但是如果我在初始化函数的帖子路由文件中写了它(console.log)它会显示0 为什么呢?

1 个答案:

答案 0 :(得分:1)

@ collection.fetch()执行异步。

当您使用console.log()时尝试已经加载的Chrome控制台数据,但是当您使用js时尝试使用数据时,在使用console.log()时会加载数据

你应该使用成功回调来知道加载时的集合长度:

@collection.fetch(
  success: (collection, response, options) ->
    console.log collection.models.length
)