/ / Konfigurácia $ .ajax s chrbticou na uzle na testovanie sľubmi - node.js, backbone.js, webstorm, sľuby

Konfigurácia $ .ajax s chrbticou na uzle na testovanie sľubmi - node.js, backbone.js, webstorm, sľuby

(Upravené výrazne zjednodušiť)

Na uzle mám nasledujúci súbor 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();

Keď spustím toto, dostanem chybu, ktorá hovorí. "Nie je možné zavolať metódu" ajax "undefined" (1359: 14)

v podstate to je výsledok, že $ je nedefinovaný. Prečo to nie je definované? Existuje niekoľko prechodných krokov, ale keď sa súbor načíta, očakáva sa, že "toto" bude "okno" v prehliadači alebo "globálne" na serveri. vykonané na uzle "this" = {}.

Takže otázka, "Ako nastavím" toto "na globálne" vo vnútri súboru backbone.js?

odpovede:

0 pre odpoveď č. 1

Na Backbone> = 1.x, môžete jednoducho priradiť Backbone.$ namiesto používania Backbone.setDomLibrary.

Riešenie pre chrbticu <0.9.9

Prvým problémom, ktorý musíte riešiť, je, ako vyto beží na uzle rovnako. Nodejs je prostredie JS na strane servera, ale neobsahuje žiadnu logiku na ovládanie DOM. Na to musíte nahrať niečo ako JSDom.

Keď máte nastavené prostredie DOM, môžete do neho načítať jQuery a kód a mal by pracovať rovnako ako prehliadač.

Ak chcete na svoju otázku konkrétne odpovedať, načítajte jQuery do priečinka global je trochu ošklivý spôsob, ako to urobiť. Mali by ste použiť Backbone "s setDomLibrary funkcia nastaviť $ na to, čo chcete.

Skúste niečo takéto:

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

Toto zlyhá, ak sa pokúsite vykonať akékoľvek funkcie DOM.