繁体   English   中英

使用节点上的主干配置$ .ajax以进行誓言测试

[英]Configuring $.ajax with backbone on node for testing with vows

(编辑以大大简化)

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

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”在浏览器中是“窗口”,在服务器上是“ global”。 在节点“ this” = {}上执行。

因此,orbone.js文件中的问题“如何将'this'设置为global”?

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

骨干解决方案<0.9.9

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

设置了DOM环境后,您可以将jQuery及其代码加载到其中,并且它应该像浏览器一样工作。

但是,要专门回答您的问题,将jQuery加载到global是一种难看的方法。 您应该使用Backbone的setDomLibrary函数将$设置为所需的值。

尝试这样的事情:

if (typeof exports !== 'undefined') {
    MyModels = exports;
    Backbone.setDomLibrary(require('jquery'));
    server = true;
} else {
    MyModels = this.MyModels = {};
}

但是,如果尝试执行任何DOM功能,这将失败。

暂无
暂无

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

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