Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Не так давно написал подобное
function Widget(stcNode){
this.srcNode = srcNode;
}
Widget.prototype.render = function(){
// Что то делаем с this.srcNode
}
Widget.prototype.destroy = function(){
// Как то чистим this.srcNode
}
// Наследуемся от Widget.
это же чистой воды плагин в терминологии jQuery
хотелось бы ещё увидеть пример отправки события на сервер
$.define
$.define('counter', {
...
methods: {
inc: function() {
this.count += this.params.step;
this.updateOnServer();
},
updateOnServer: function() {
$.ajax(...)
}
}
})
Я немного не понял — вы троллите?
Предлагаете написать 240 килобайт jQuery кода на велосипеды в виде чистого javascript?
убирать всё из глобальной области видимости
$.jblocks('define', { ... });
$.jblocks('init');
$.jblocks('destroy');
Всего лишь backbonejs+requirejs и вот вам готовая модульная система с неограниченными возможностями построения клиентской части
<div data-widget="Select"></div>
var widgets = [];
$('div[data-widget]').each(function(index, el) {
var widget = $(el).data('widget');
widgets.push(widget);
});
require(widgets);
function injectScript(src){
var s, t;
s = document.createElement('script'); s.type = 'text/javascript'; s.async = true; s.src = src;
t = document.getElementsByTagName('script')[0]; t.parentNode.insertBefore(s,t);
}
Разве так не работает?
// Рендеринг виджетов.
var widgets = $('[data-widget]'),
widgetsNames = [];
widgets.each(function(){
widgetsNames.push('widget/' + $(this).data('widget'));
});
// Предварительная загрузка скриптов виждетов для последовательной
// обработки.
require(widgetsNames, function(a){
// Последовательный рендеринг виджетов.
widgets.each(function(){
var srcNode = this;
require(['widget/' + $(this).data('widget')], function(widget){
var widget = new widget(srcNode, obj);
widget.render();
var widgetId = $(srcNode).attr('id');
// Добавление виджета к списку объявленных в popup виджетов.
if(widgetId !== undefined){
obj.widgets[widgetId] = widget;
}
});
});
});
Можно вот такой хак, вместо requirejs
entry: {
index: path.resolve('./src/index.js'),
admin: path.resolve('./src/admin.js')
}
При этом на выходе получим два отдельных файла — обычному пользователю отдаем один index.js, админу оба: index.js + admin.js.Ну и, естесна, делать две сборки, с admin.js файлом и без него нельзя
А тут у вся общая логика лежит в index.js, а в admin.js лишь то, что относится к админу и отдается сверху тогда, когда необходимо.
Для чего загружать файлы последовательно
почему вы решили что RequireJs этого не умеет

Если я правильно понял задачу, то это можно сделать например так
require([widget1, widget2, widget3], function(widgets){
for(var i in widgets)
widgets[i].render();
});
Или «Начальство против» это такая новая методология разработки?
Ну выше вы утверждали что это невозможно, а на деле выходит что это решается в пять строчек кода
Нужно уметь аргументировать свою точку зрения, указать начальству на недостатки и предложить альтернативу
Ну выше вы утверждали что это невозможно, а на деле выходит что это решается в пять строчек кода
Сама по себе задача позразумавает костыльное решение
Никаких ограничений такого рода в RequireJs нет.
Где в вебе вообще есть синхронная загрузка файлов
$.ajax({
async: false
});
Как это нет? RequireJS не грузит файлы синхронно.
В нем файлы загружаются синхронно при помощи RequireJs
Использование jQuery.ajax ни чем не лучше RequireJs, а тем более с параметром async: false
Во-первых
for(var i in widgets){
$.ajax({
async: false,
url: ...
});
}
Во-вторых
В-третьих
В-четвертых
jQuery-плагин для организации компонентов на странице