繁体   English   中英

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

[英]How do I return new Backbone instance from class function

我希望能够获得像这样的随机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)Script,其中所有操作都使用回调完成。 您不会从App.Models.Book.random返回随机书, 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

呼叫

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}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM