(编辑后可大大简化)
在节点上,我有以下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“在浏览器中是"window”或在服务器上是"global“。在节点"this“= {}上执行。
因此,backbone.js文件中的问题是“如何将'this‘设置为全局”?
发布于 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函数将$设置为您想要的值。
尝试如下所示:
if (typeof exports !== 'undefined') {
MyModels = exports;
Backbone.setDomLibrary(require('jquery'));
server = true;
} else {
MyModels = this.MyModels = {};
}但是,如果您尝试执行任何DOM函数,则此操作将失败。
https://stackoverflow.com/questions/12792289
复制相似问题