2013-03-27 2 views
8

Я рассмотрел множество примеров в Интернете, как начать разработку приложений BB с помощью requireJS, но я как бы потерял.Базовая и требовательная эффективная загрузка

Я думаю, что у AMD есть цель, что она загружает файлы только в том случае, если они действительно нужны. Не раньше.

Почему я вижу примеры только там, где разработчик помещает почти все файлы в качестве зависимости в начале своего основного файла?

Вот пример: https://github.com/jcreamer898/RequireJS-Backbone-Starter/tree/master/js

Это приложение мгновенно загружает main.js, который зависит от app.js который загружает маршрутизаторы/home.js которых требует Views/view.js который загружает шаблон вида по модели и/модель.js который ... и конец.

Я не вижу, как расширить это приложение, например, с большим количеством представлений, где зависимости видов (его модели, шаблоны, коллекции, сторонние API и т. Д.) Загружаются только тогда, когда маршрутизатор вызывает и инициализирует их. Другим способом было бы бессмысленно использовать AMD, где вы загружаете все свои файлы при инициализации своего приложения.

Подобный пример здесь: http://backbonetutorials.com/organizing-backbone-using-modules/ см router.js file.Actually это «мнение/проекты/список» загружает и «просмотр/пользователи/список» зависимости, пока маршрутизатор еще не знает, будет ли пользователь в них нуждается будущее или нет.

Просьба сообщить, спасибо заранее!

ответ

6

Это немного трудно увидеть в таком маленьком примере приложения, потому что вы должны загрузить что-то на начальном пути, и загрузка что-то в Backbone обычно означает, что модель, сбор и представление. Поскольку образец, который вы связали, имеет только один из них, то да, вы загружаете почти все.

Где вы видите функцию «по требованию», где вы добавляете дополнительные маршруты/представления/модели/и т. Д. Однако имейте в виду, что по требованию загрузка, вероятно, является вторичной целью AMD/RequireJS. Основная цель - modularity. Затем они дают вам много вариантов для загрузки вещей по требованию или для комплектации всего через the optimizer

Также нет ничего, что говорит о необходимости поместить все require() в начало файла. Вы можете сделать их позже (например, при запуске маршрута). Ниже приведена модифицированная версия home.js из вашего первого связанного примера. Если вы используете инструменты Chrome dev, вы можете посмотреть вкладку сети, когда «отладчик»; оператор приостанавливает выполнение. Затем продолжите выполнение и посмотрите, как загружаются остальные сценарии.

define([ 
    'jquery', 
    'backbone', 
    'underscore' 
    ], 
function($, Backbone, _){ 
    var Router = Backbone.Router.extend({ 
     initialize: function(){ 
      Backbone.history.start(); 
     }, 
     routes: { 
      '': 'home' 
     }, 
     'home': function(){ 
      debugger; 
      require(['views/view'], function (mainView) { 
       mainView.render(); 
      }); 
     } 
    }); 

    return Router; 
}); 

Для получения дополнительной информации см. this person's article и где вы можете пойти дальше.

+0

Я добавил еще один пример, в котором больше представлений, и в логике приложения по-прежнему не хватает этой точки по требованию. – zsitro

+0

Спасибо! Ваш пример и статья мне очень помогли. – zsitro

+0

Perfect. У меня было много загрузок файлов для каждого маршрута. Теперь все проскакивает! Благодаря! – matthoiland