0

(大幅に簡略化するために編集されています)

ノードには、次の 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' をグローバルに設定するにはどうすればよいですか?」という質問はありますか?

4

1 に答える 1

0

Backbone.$Backbone >= 1.x では、 を使用するのではなく、単純に割り当てることができますBackbone.setDomLibrary

バックボーン < 0.9.9 のソリューション

対処する必要がある最初の問題は、これをノードで実行する方法です。Nodejs はサーバー側の JS 環境ですが、DOM を制御するためのロジックは含まれていません。そのためには、JSDOM のようなものをロードする必要があります。

DOM 環境をセットアップしたら、そこに jQuery とコードをロードすると、ブラウザと同じように動作するはずです。

あなたの質問に具体的に答えるために、jQueryをにロードするのglobalは少し醜い方法です。setDomLibrary$ を必要なものに設定するには、Backbone の関数を使用する必要があります。

次のようなことを試してください:

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

ただし、DOM 関数を実行しようとすると、これは失敗します。

于 2012-10-09T03:14:52.517 に答える