首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在节点上配置具有backbone的$.ajax,以便使用vows进行测试

在节点上配置具有backbone的$.ajax,以便使用vows进行测试
EN

Stack Overflow用户
提问于 2012-10-09 11:04:32
回答 1查看 462关注 0票数 0

(编辑后可大大简化)

在节点上,我有以下server.js文件。

代码语言:javascript
复制
var Backbone = require('backbone');

var Tweet = Backbone.Model.extend({});
var Tweets = Backbone.Collection.extend({
    model : Tweet,
    url: function () {
        return 'http://search.twitter.com/search.json?q=backbone'
}
});

var myTweets = new Tweets();
myTweets.fetch();

当我运行这段代码时,我得到一个错误信息。“无法调用未定义的方法'ajax‘”(1359:14)

基本上,这是$未定义的结果。为什么它是未定义的?有许多中间步骤,但当文件加载时,它期望"this“在浏览器中是"window”或在服务器上是"global“。在节点"this“= {}上执行。

因此,backbone.js文件中的问题是“如何将'this‘设置为全局”?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-09 11:14:53

在Backbone >= 1.x上,您可以简单地分配Backbone.$而不是使用Backbone.setDomLibrary

Backbone < 0.9.9的解决方案

您需要解决的第一个问题是如何在Node上运行它。Nodejs是一个服务器端JS环境,但它不包含任何用于控制DOM的逻辑。为此,您需要加载类似于JSDom的内容。

当您设置了一些DOM环境时,您可以将jQuery和您的代码加载到其中,它应该像浏览器一样工作。

确切地说,要回答您的问题,将jQuery加载到global中是一种有点丑陋的方式。您应该使用Backbone的setDomLibrary函数将$设置为您想要的值。

尝试如下所示:

代码语言:javascript
复制
if (typeof exports !== 'undefined') {
    MyModels = exports;
    Backbone.setDomLibrary(require('jquery'));
    server = true;
} else {
    MyModels = this.MyModels = {};
}

但是,如果您尝试执行任何DOM函数,则此操作将失败。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12792289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档