Sto tentando di implementare un test di base ESTREMAMENTE che utilizza jquery, underscore.js e backbone.js caricati tramite require.js e per qualche motivo non riesco proprio a sembrare ottenere tutto allineato correttamente. La ricerca mostra che altri non hanno avuto questi stessi problemi quindi so che deve essere qualcosa di semplice che non vedo.Backbone/Underscore di base molto semplice tramite il problema Require.js mi guida batty
Il problema che sto avendo è che quando backbone.js si sta caricando, non riesce a trovare un riferimento a _. Ho trovato altre persone che hanno segnalato lo stesso problema, ma il problema era in genere il passaggio dei riferimenti di dipendenza in gestori nell'ordine sbagliato o altri problemi evidenti. Questo sta accadendo quando il backbone si sta caricando.
Ho anche visto un certo numero di soluzioni "meccaniche" come "mettere tutto nello stesso file" e caricarle semplicemente in modo tradizionale inserendo un certo numero di script nell'ordine corretto ma VERO VERAMENTE che voglio ottenere questo funziona dal momento che sembra un approccio così potente.
Inizialmente ho iniziato con la struttura qui http://backbonetutorials.com/organizing-backbone-using-modules/ che funziona nella demo, ma si sente un po 'fragile perché quando tento di apportare modifiche molto semplici o di costruire un semplice campione da zero, si rompe.
Dopo aver colpito la testa contro questo per troppo tempo, sono tornato e ho trovato questa pagina Loading Backbone and Underscore using RequireJS con un altro semplice esempio e ho riacquistato la speranza. Tuttavia, dopo aver creato un nuovo test basato su di esso, sto ancora ricevendo lo stesso problema anche se il ramo 0.5.3-optamd di backbone dovrebbe gestire la propria dipendenza dal carattere di sottolineatura.
Senza ulteriori indugi, ecco il codice super-diretto che dovrebbe funzionare ma invece mi sta facendo impazzire. Qui sta sperando che sia qualcosa di ovvio Ho appena perso in qualche modo:
index.html
<!DOCTYPE html>
<html>
<head>
<title>Backbone.js/Underscore.js via Require.js Learning Page</title>
<script src="js/libs/require/require.js"></script>
<script src="js/main.js"></script>
</head>
<body>
<div>Backbone.js/Underscore.js via Require.js Learning Page</div>
<div class="testhook"></div>
</body>
</html>
JS/main.js
require.config({
paths: {
'jquery': 'libs/jquery/1.7/jquery',
'underscore': 'libs/underscore/1.2.2/underscore',
'backbone': 'libs/backbone/0.5.3-optamd/backbone'
},
baseUrl: '/js',
urlArgs: 'v=1.0'
});
require([
'domReady',
'app'
],
function(domReady, App){
domReady(function(){
console.log('Dom is ready');
App.init();
});
}
);
js/app.js
// Filename: app.js
define([
'jquery',
'underscore',
'backbone'
],
function($, _, Backbone){
var init = function(){
console.log('app.js > init()');
// jquery test (WORKS)
$('.testhook').append('testhook append');
// underscore test (WORKS)
console.log(_.map([1, 2, 3], function(n){ return n * 2; }));
// backbone test (DIES)
var artist = new Backbone.Model({
firstName: "Wassily",
lastName: "Kandinsky"
});
artist.set({birthday: "December 16, 1866"});
console.log(JSON.stringify(artist));
}
return { init: init };
}
);
L'esatta l'output della console è:
Uncaught TypeError: Cannot call method 'extend' of undefined (backbone.js:150)
main.js:18 Dom is ready
app.js:11 app.js > init()
app.js:17 [2, 4, 6]
app.js:20 Uncaught TypeError: Cannot read property 'Model' of null (app.js:20)
NOTE:
Line 150 in unminified backbone.js is:
_.extend(Backbone.Model.prototype, Backbone.Events, {
Sono su un computer Windows 7 che utilizza Chrome 17.0.938.0 dev-m.
mie versioni di script sono:
backbone: 0.5.3-optand
jquery: 1.7
require: 1.0.1
underscore: 1.2.2
La mia struttura di directory è:
js
+-- libs/
¦ +-- backbone/
¦ ¦ +-- 0.5.3-optamd/
¦ ¦ +-- backbone.js
¦ +-- jquery/
¦ ¦ +-- 1.7/
¦ ¦ +-- jquery.js
¦ +-- require/
¦ ¦ +-- require.js
¦ +-- underscore/
¦ +-- 1.2.2/
¦ +-- underscore.js
+-- app.js
+-- domReady.js
+-- main.js
+-- order.js
index.html
Non posso credere quanta difficoltà questo mi sta dando e sono veramente sperando che qualcuno possa far luce su ciò che il diamine sta succedendo qui.
tuo esempio per me funziona al 100%. quale esatta versione di Backbone stai usando? optamd o optamd3? – Riebel