2013-03-25 17 views
5

Require.js uygulamasında yeniyim ve basit olacağını düşündüğüm ama acı çekmeye başladığım bir şeyi yapmaya çalışıyorum.Require.js ve Backbone ile global bir Uygulama Ad Alanı Tanımlama

Omurgam uygulamam için genel bir ad alanı tanımlamaya çalışıyorum ve bunu bir modül olarak yükleyin. İşte benim ad (main.js) 'dir:

define(
['jquery', 
    'underscore', 
    'backbone', 
    'GlobalRouter' 
], 
function($, _, Backbone) { 
var App= { 
    Models: {}, 
    Views: {}, 
    Collections: {}, 
    Routers: {}, 
    init: function() { 
     new App.Routers.GlobalRouter(); 
     Backbone.history.start(); 
    } 
} 
return App; 

}); 

ve burada benim config.js dosyasıdır:

require.config({ 
// your configuration key/values here 
baseUrl: "js", // generally the same directory as the script used in a data-main attribute for the top level script 
paths: { 
    'jquery' : '//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min', 
    'underscore': 'vendor/underscore-min', 
    'backbone': 'vendor/backbone-min', 
    'marionette': 'vendor/backbone.marionette', 
    'main' : 'main' 
}, // set up custom paths to libraries, or paths to RequireJS plugins 
shim: { 
    'underscore': { 
     exports: '_' 
    }, 

    'backbone': { 
     deps: ['underscore', 'jquery'], 
     exports: 'Backbone' 
    }, 

    'main' : { 
     deps: ['underscore', 'jquery', 'backbone', 'GlobalRouter'], 
     exports: 'TEWC' 
    } 

} // used for setting up all Shims (see below for more detail) 
}); 

define([ 
'jquery', 
    'underscore', 
    'backbone', 
    'main' 
], 
function($, _, Backbone, App, GlobalRouter) { 
console.log(App) 
alert('hit ') 
    $(function() { 
     App.init(); 
    }); 
} 

);

ve iyi ölçmek için

, burada yönlendiricidir: Geçmişte

define([ 
'jquery', 
'underscore', 
'backbone', 
'main' 
], 
function($, _, Backbone, TEWC) { 

TEWC.Routers.GlobalRouter = Backbone.Router.extend({ 
    routes: { 
     "" : "index", 
     "documents/:id" : "edit", 
     "login" : "login" 
    }, 

    edit: function(id) { 
     alert('edit') 
    }, 

    index: function() { 
     alert('index') 
    }, 

    login: function() { 
     alert('login') 
    } 
}); 

}); 

, ben başlamıştı 'uygulamasını tanımsız hatadır.' Şimdi, bu diyor birkaç dakika sonra bir yük zaman aşımı hatası alıyorum:

Uncaught Error: Load timeout for modules: main 

Ancak uyarı ateş etmez ve main.js yüklenen almak gibi görünmüyor, ama ben yönlendirici yapar inanıyorum ve TEWC'nin tanımlanmamış olduğunu kabul etmiyor - bu yüzden Ağ sekmemde olmamasına rağmen yüklenebilir.

Bu muhtemelen bir çaylak sorusu - bunun hakkında herhangi bir fikir sahibi olan var mı?

cevap

2

Aşağıdaki kod GlobalRouter tanımlamıyor henüz olsun en

define([ 
'jquery', 
    'underscore', 
    'backbone', 
    'main' 
], 
function($, _, Backbone, App, GlobalRouter) { 
console.log(App) 
alert('hit ') 
    $(function() { 
     App.init(); 
    }); 
} 

Eğer konsoldan kontrol ..can main yüklenmemesi define İkincisi

e GlobalRouter eklemek tanımlamak callback'inde geçirilen Ne Erişmeye çalıştığı URL? Büyük olasılıkla bir yanlış konfigürasyon.

+0

Bu, omurgalı Addy Osmani'nin TodoMVC'siyle bir araya getirildi ve fark yaratan (https://github.com/addyosmani/todomvc/tree/gh-pages/dependency-examples/backbone_require) gerekiyordu! Teşekkürler! – streetlight

+0

sokak lambası: Sorunun tam olarak ne olduğunu söyleyebilir misiniz? Ben benzer bir sorun yaşıyorum. –

+0

@JohnEdward, main.js'yi bir AMD stilinde tanım işleviyle vb. Yapılandırmam gerektiğine inanıyorum. Ayrıca, tanımladığınız dosyaların sırasının, işlev parametrelerindeki şeylerin sırasına da uyduğundan emin olmak çok önemlidir - anahtar olduğuna inanıyorum. Bu hiç yardımcı olmaz mı? – streetlight

2

Hatalı iseniz, sorununuzun config.js, require.config() 'dan sonra, define() yerine bir require() olması gerekir. Daha ayrıntılı olarak açıklanmaktadır. Şu anda var: Bu idam istediğiniz kod olduğu için

define([ 
'jquery', 
    'underscore', 
    'backbone', 
    'main' 
... 

Bu define bir require olmalıdır; modül tanımı değildir.

Bu ve tabii, daha önce belirtildiği gibi eksik GlobalRouter bağımlılığı.