Require.js зарежда Backbone изгледи по ред

Имам проблеми със зареждането на колекция от Backbone Views с RequireJS - тъй като те не се зареждат в правилния ред.

По-долу е даден прост пример за това, което се опитвам да постигна - страница преминава през колекция от джаджи и, използвайки нейния атрибут "шаблон", получава нейния Backbone View. От решаващо значение е те да се показват в ред и в момента се показват в произволен ред.

page.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/ questions/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