2012-07-27 5 views
1

J'essaie actuellement RequireJS 2.0 et par conséquent je dois changer du code. Voici mon main.js, lancé avec data-main dans mon index.phtml.RequireJS 2.0 - Définir mon Backbone.Router

EDIT: structure du projet oublié, peut être utile :)

->public 

-> css 
-> js 
app.js 
facade.js 
main.js 
router.js 
... 
    -> collections 
    -> libs 

    -> backbone 
    -> jquery 
    -> json2 
    -> plugins 
    -> require 
    -> underscore 

-> templates 
... 


// Filename: main.js 

// Require.js allows us to configure shortcut alias 
// There usage will become more apparent futher along in the tutorial. 

require.config({ 
    //Here baseUrl = /js (Loaded in data-main in logged.phtml) 
    // 3rd party script alias names (Easier to type "jquery" than "libs/jquery-1.7.2.min") 
    paths: { 
     jQuery: 'libs/jquery/jquery', 
     Underscore: 'libs/underscore/underscore', 
     Backbone: 'libs/backbone/backbone', 
     JSON: 'libs/json2/json2', 
     templates: '../templates' 
    }, 

    // Sets the configuration for your third party scripts that are not AMD compatible 
    shim: { 
     'libs/plugins/bootstrap-min': ['jQuery'], 
     'libs/plugins/jquery.cookies.min': ['jQuery'], 
     'jQuery': { 
      exports: '$' 
     }, 
     'JSON': { 
      exports: 'JSON' 
     }, 
     'Underscore': { 
      exports: '_' 
     }, 
     'Backbone': { 
      deps: ['Underscore', 'jQuery'], 
      exports: 'Backbone' // attaches "Backbone" to the window object 
     } 
    } 
}); 

define([ 
    // Load our app module and pass it to our definition function 
    'app', 
    'jQuery', 
    'Underscore', 
    'Backbone', 
    'JSON' 
], function(App) { 
    // The "app" dependency is passed in as "App" 
    // Again, the other dependencies passed in are not "AMD" therefore don't pass a parameter to this function 
    App.initialize(); 
}); 

J'ai essayé d'ajouter « routeur » à ce fichier avec ses dépendances, mais rien n'a changé, donc je suppose qu'il était inutile.

Et voici les app.js chargés lors de l'appel App:

define([ 
    'jQuery', 
    'Underscore', 
    'Backbone', 
    'JSON', 
    'router', // Request router.js 
    'i18n!nls/langs', 
    'facade', 
    //'order!libs/plugins/jquery.backstretch.min' 
    //'libs/plugins/backbone.validation.min' 
], function($, _, Backbone, JSON, Router, langs, facade) { 
var initialize = ... 
... 
... 
return { 
     initialize: initialize 
    }; 
}); 

est ici le problème, dans ma définition router.js, j'ai utilisé un console.log et il m'a montré qu'il retournait l'objet à droite.

Mais quand j'appelle router dans mon app.js, router reste indéfini. J'ai probablement fait une erreur mais je ne peux pas le trouver.

EDIT: Ajouté le code router.js

require([ 
    'jQuery', 
    'Underscore', 
    'Backbone', 
    'JSON', 
    'facade', 
    'models/UserModel', 
    'libs/plugins/jquery.cookies.min' 
], function($, _, Backbone, JSON, facade, User, cookies){ 
    var AppRouter = Backbone.Router.extend({ 
... 
    }); 

    var app_router = new AppRouter; 
     // Start Backbone history a neccesary step for bookmarkable URL's 
     Backbone.history.start(); 
    return app_router; 
}); 
+0

Est-ce que router.js définit correctement un module AMD? – EndangeredMassa

+0

Eh bien, ce que vous avez dit m'a fait penser un peu, et j'ai vérifié mon 'router.js', il y avait un' require' au lieu d'un 'define' afin qu'il ne me renvoie pas un module AMD ... Faites une réponse Je peux l'accepter;)! Merci (j'ai édité avec 'router.js' + l'erreur originale pour que vous puissiez le signaler) – Sky

Répondre

3

Votre fichier router.js ne définit pas un module AMD correctement. Vous devez utiliser define, et non require.

+0

J'ai perdu mes 2 heures juste pour cette raison ... Merci votre réponse était tout droit au point! +1 – Shubh