【问题标题】:Backbone.js fetch() ajax errorBackbone.js fetch() ajax 错误
【发布时间】:2011-09-13 13:24:36
【问题描述】:

我正在为一个项目构建一个基本的 CRUD 系统,我们决定捆绑 Backbone.js 和 CoffeeScript 以抽象出更多的 JavaScript 功能。对我来说学习曲线非常陡峭,因为我不是 JS 专业人士。

目前,我只是想拉一张唱片。任何记录。因此,在我继续之前,我已经设置了一个虚拟路由来通过 JSON 提供“产品”记录集,以查看它是如何呈现的。

  window.Product = Backbone.Model.extend
    initialize: -> console.log this
  window.Products = Backbone.Collection.extend
    model: Product
    initialize: -> console.log this
    url: '/dummy'

所以,在控制台中,我输入:

product = new Product()

而且它似乎可以很好地渲染产品。但是当我输入时:

product.fetch()

返回:

TypeError: Cannot call method 'ajax' of undefined

我对 Collection 进行了同样的尝试。

products = new Products()
products.fetch()
TypeError: Cannot call method 'ajax' of undefined

我已经让其他部分(视图渲染等)工作得很好,但是这个 ajax 错误反复出现在我身上。我花了几个小时浏览不同的文档(包括官方文档,以及我可以从 wiki 追踪到的所有信息),用纯 JavaScript 和 CoffeeScript 尝试代码,实现不同的范围(带/不带窗口命名空间)等。Google 上没有任何内容。

这一定是一件非常简单的事情,我可能应该知道,但我一生都无法弄清楚。或者这是我错过的文档中的一处。谁能告诉我我做错了什么?

【问题讨论】:

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


    【解决方案1】:

    @Ironchamber:为了使用 Backbone 的 Ajax 方法,您还必须提供一个提供跨浏览器 Ajax 支持的库。 Backbone 被优化为使用 jQuery 或 Zepto。从您的错误消息来看,我认为您缺少其中之一。

    【讨论】:

    • 另请注意,Backbone 要求您在 before Backbone 本身包含 jQuery 或 Zepto。查看annotated source:它的第一行之一是var $ = this.jQuery || this.Zepto;。所以jQuery/Zepto 必须已经存在,否则当调用$.ajax$ 将是undefined
    • 谢谢大家,绝对是这样。知道这是一个菜鸟的错误!
    【解决方案2】:

    另一种解决方案是在文档就绪时调用它:

    Backbone.setDomLibrary(jQuery); 
    

    这样文件包含顺序无关紧要。

    【讨论】:

      猜你喜欢
      • 2020-01-10
      • 2013-12-27
      • 2012-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-19
      • 2023-03-18
      相关资源
      最近更新 更多