Require.js загружает представления Backbone по порядку

У меня возникают проблемы с загрузкой коллекции Backbone Views с помощью RequireJS, поскольку они загружаются в неправильном порядке.

Ниже приведен простой пример того, чего я пытаюсь достичь: страница перебирает коллекцию виджетов и, используя свой атрибут «шаблон», получает представление Backbone. Крайне важно, чтобы они отображались по порядку, и в настоящее время они отображаются в случайном порядке.

страница.js

collection.each(function(widget) {
    require(['order!views/widgets/' + widget.get('template')], function(WidgetView) {
        WidgetView.render();
    })
}

widgets/widgetView.js (общий вид)

define(['underscore','backbone'], function(_, Backbone) {
    var WidgetView = Backbone.View.extend({
        render: function() {
            // .. show view
        }
    });
   return WidgetView;
});

Я в курсе приказа! плагин для RequireJS, но, похоже, он не выполняет свою работу. Есть ли что-то, что я делаю неправильно?


person crawf    schedule 06.04.2012    source источник
comment
Ознакомьтесь с принятым ответом на stackoverflow.com/ вопросов/8131265/ Я думаю, это то, что вы ищете :)   -  person PJUK    schedule 06.04.2012


Ответы (1)


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

var widgets=[];
collection.each(function(widget) {
    widgets.push('order!views/widgets/' + widget.get('template'));
});

require(widgets, function() {
    var viewclass, view;
    for (var i=0, l=arguments.length; i<l; i++) {
        viewclass=arguments[i];
        view=new viewclass();
        view.render();
    }   
});
person nikoshr    schedule 06.04.2012
comment
А, это имеет смысл. Однако кажется, что я получаю сообщение об ошибке при вызове «аргументов», причем ошибка заключается в том, что «Функция объекта () {a.apply(this,arguments)} не имеет метода «рендеринга». - person crawf; 07.04.2012
comment
@crawf В моем примере не было экземпляра представления. Обновил мой ответ, теперь он должен работать - person nikoshr; 07.04.2012
comment
Дох! Я должен был это знать... Между прочим, это сработало - большое спасибо за вашу помощь! - person crawf; 07.04.2012