我如何从类函数返回新的主干实例

How do I return new Backbone instance from class function

本文关键字:实例 返回 类函数      更新时间:2023-09-26

我希望能够获得一个随机的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在我的回调中是正确的。

这是(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

Call

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}