如何从类函数返回新的Backbone实例

时间:2013-04-02 05:11:03

标签: javascript jquery backbone.js coffeescript

我希望能够获得一个随机的Book模型,如:

book = App.Models.Book.random()

我有以下Backbone.js模型(在CoffeeScript中)

class App.Models.Book extends Backbone.Model
  @random: ->
     $.getJSON "/books/random", (data) ->
       new App.Models.Book
         author: data['author']
         title: data['title']

但是,正如我确定你能说的那样,@ random正在返回jqXHR对象,而不是实例。我已经检查过,data在我的回调中是正确的。

2 个答案:

答案 0 :(得分:4)

这是(Java | Coffee)脚本,其中一切都是使用回调完成的。你不会从App.Models.Book.random返回随机书,你会给它一个回调函数:

class App.Models.Book extends Backbone.Model
  @random: (callback) ->
     $.getJSON "/books/random", (data) ->
       book = new App.Models.Book
         author: data['author']
         title: data['title']
       callback?(book)

然后使用它:

App.Models.Book.random (book) ->
  # Do something useful with book in here

如果调用者想要访问所有常见的奇特AJAX挂钩,那么random类方法仍然会返回jqXHR

答案 1 :(得分:1)

呼叫

book = App.Models.Book.random()

在课堂上

class App.Models.Book extends Backbone.Model

  @random: ->
    temp = new App.Models.Book()
    temp.url = "/books/random"
    temp.fetch {wait: true}  # or whatever parameters you want

那应该做你的工作。

但对我来说,我更喜欢非功能方式。

book = new App.Models.Book()
book.getRandomData()

中的

class App.Models.Book extends Backbone.Model

  getRandomData: =>
    @url = "book/random"
    @fetch {wait: true}