2013-05-27 3 views
2

Я читал предыдущие темы, в которых другие члены имели одинаковые сообщения об ошибках, как и я, но их принятое решение, похоже, не помогает.Сочетание проблем Require.js и Backbone.js/Underscore.js

В основном я получаю это в консоли Chrome при попытке загрузить index.html:

Uncaught Error: Module name "underscore" has not been loaded yet for context: _. Use require([]) 

Пару секунд спустя это проявляется: сетевые инструменты

Uncaught Error: Load timeout for modules: underscore,backbone 

Chrome не показывает любые аномалии все до тех пор, пока day_view.js не будет загружен штраф (200 OK).

структура файла

enter image description here

index.html

... 
<script> 
     var require = { 
      deps: ["jquery/jquery-min", "underscore/underscore-min", "backbone/backbone-min"] 
     }; 
</script> 
<script data-main="scripts/main" src="scripts/require.js"></script> 
... 

main.js

require.config({ 
    baseUrl: 'scripts', 

    paths:{ 
     jquery:'jquery/jquery-min', 
     underscore:'underscore/underscore-min', 
     backbone:'backbone/backbone-min' 
    }, 

    shim: { 
     underscore: { 
      exports: '_' 
     }, 
     backbone: { 
      deps: ["underscore/underscore-min", "jquery/jquery-min"], 
      exports: "Backbone" 
     } 
    }, 

    waitSeconds: 200 
}); 

require(['day_view'], function (day_view) { 
    function start() { 
     day_view.render(); 
    } 

    return { 
     start:start 
    }; 
}); 

day_view.js

define(['jquery', 'underscore', 'backbone'], function($, _, Backbone) { 
    function render() { 
     ... 
    } 
... 
+0

Этот вопрос может помочь вам: HTTP: // StackOverflow.com/questions/10866740/loading-jquery-underscore-and-backbone-using-requirejs-2-0-1-and-shim – jantimon

+0

@jantimon Я читал это, но я не вижу ничего, что помогает с моим текущее затруднительное положение. Есть ли что-нибудь, в частности, вы думаете, что я должен читать? Я читал это (http://requirejs.org/docs/errors.html#notloaded), но я тоже не могу найти причину. – MdaG

+0

try 'shim = {... deps: [" underscore "," jquery "] ...}' – jantimon

ответ

8

Это, наконец, работал.

require.config({ 
    paths:{ 
     jquery:'jquery/jquery-min', 
     underscore:'underscore/underscore-min', 
     backbone:'backbone/backbone-min' 
    }, 
    shim: { 
     underscore: { 
      exports: '_' 
     }, 
     backbone: { 
      deps: ["underscore", "jquery"], 
      exports: "Backbone" 
     }, 
     waitSeconds: 15 
    } 
}); 

require(['day_view'], function (day_view) { 
    function start() { 
     day_view.show(); 
    } 
    console.log(day_view); // Empty object here? 
    return { 
     start:start 
    }; 
}); 

и

define(['jquery', 'underscore', 'backbone'], function($, _, Backbone) { ... 
3

Вы можете использовать подкладку выше, или вы можете также использовать jrburke-х ** AMD совместимый вилку Backbone/Подчеркивание:

https://github.com/amdjs/backbone

https://github.com/amdjs/underscore

Это позволяет вам просто:

require.config({ 
    paths:{ 
     jquery:'jquery/jquery-min', 
     underscore:'underscore/underscore-min', 
     backbone:'backbone/backbone-min' 
    } 
}); 

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

Откровенно говоря, я нашел вилку проще/чище/более надежной, чем с помощью прокладки.

** FYI jrburke является создателем requirejs.

2

PS Хорошие новости, Подчеркивание 1.6.0 теперь поддерживает requirejs define !!!

версии ниже этого требуют регулировочных прокладок, или требующих underscore.js то слепо надеясь, что «_» глобальная переменная hasn, т сломаны (который, чтобы быть справедливым является справедливой ставки)

просто загрузите его в по

requirejs.config({ 
    paths: { 
     "underscore": "PATH/underscore-1.6.0.min", 
    } 
    }); 

нет подклинивание не требуется :)