как использовать AMD в одностраничном приложении для загрузки только определенной зависимости

Насколько я понимаю, одно из преимуществ использования AMD для управления загружаемыми зависимостями. Но в одностраничном приложении с использованием require.js будут загружены все зависимости.

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

main.js требует router.js
router.js требует view_a.js и view_b.js

router.js отображает представления

routes: {  
   "view_b":"b",   
   "view_a":"a"  
},  
a:function{  
  showView(new ViewA());  
},   
b:function{  
  showView(new ViewB());  
}

Теперь предположим, что я перехожу к example.com/#view_b, для которого требуется только код из view_b.js, но не используется ничего из view_a.js. Можно ли в любом случае загрузить или установить приоритет загрузки view_b.js с помощью require.js или чего-то подобного?


person null_radix    schedule 03.11.2012    source источник
comment
Почему вашему маршрутизатору требуются эти файлы просмотра?   -  person Bergi    schedule 03.11.2012
comment
@Bergi Потому что маршрутизатор отображает вид.   -  person null_radix    schedule 03.11.2012
comment
Но только тот, который нужен, не так ли? Поэтому он должен требовать его динамически   -  person Bergi    schedule 03.11.2012
comment
@Bergi Я только что добавил структуру router.js, поскольку маршрутизатор обрабатывает рендеринг showView, он должен включать все представления.   -  person null_radix    schedule 03.11.2012
comment
Почему бы не изменить showView(new ViewB()) на require("view_b", function(constr){ showView(new constr()); })?   -  person Bergi    schedule 03.11.2012
comment
@Bergi Да, это то, что я искал. Оглядываясь назад, это очевидно, но я не понимал, что у вас может быть вложенный метод require(). Спасибо!   -  person null_radix    schedule 04.11.2012


Ответы (1)


Вы не можете, потому что require.js требует, чтобы все зависимости вашего файла были загружены перед его выполнением.

Я вижу два решения вашей проблемы:

  • Создайте два отдельных Backbone.Router, например, вам «требуются» только необходимые модули для каждого маршрутизатора (ИМХО, это не лучшее решение)

  • Используйте оптимизатор require.js, он объединит все ваши файлы Javascript в один. Конечно, вы используете его только для производства, а не для разработки.

person julesbou    schedule 03.11.2012