Я использую Almond и оптимизатор r.js, чтобы объединить все мои скрипты в один файл для одностраничного приложения на основе Backbone.js.
Мой файл сборки:
({
name: '../bower_components/almond/almond',
include: ['main'],
insertRequire: ['main'],
baseUrl: 'src',
optimize: 'uglify2',
mainConfigFile: 'src/main.js',
out: 'javascripts/scripts.js',
preserveLicenseComments: false,
paths: {
jquery: '../bower_components/jquery/dist/jquery',
underscore: '../bower_components/underscore/underscore',
backbone: '../bower_components/backbone/backbone',
kineticjs: '../bower_components/kineticjs/kineticjs',
'jquery-ui': '../bower_components/jquery-ui/ui',
'jquery.layout': '../bower_components/jquery.layout/dist/jquery.layout-latest'
},
shim: {
'jquery.layout': {
deps: [
'jquery-ui/core',
'jquery-ui/draggable',
'jquery-ui/effect',
'jquery-ui/effect-slide'
],
exports: 'jQuery.fn.layout'
}
}
})
В моем представлении Backbone я инициализирую плагин jquery-layout:
define(['backbone', 'underscore', 'jquery.layout'], function(Backbone, _) {
'use strict'
return Backbone.View.extend({
el: $('#application'),
initialize: function() {
this.$el.layout({
west: {
size: '50%',
closable: false,
slidable: false,
resizable: true
}
});
}
});
});
Панели отображаются правильно, однако я не могу изменить размер ни одной из них. Я обнаружил, что $.fn.draggable
(виджет JQuery UI Draggable) не инициализируется во время объявления плагина jquery-layout.
Это указывает на то, что, вероятно, виджет не загружается. Итак, я проверил комбинированный исходный файл и заметил, что код виджета JQuery UI Draggable появляется перед кодом плагина jquery-layout, что означает, что зависимости вставлены в правильном порядке. Печать $.fn.draggable
в консоли Firebug также показывает, что виджет доступен, по крайней мере, после того, как документ будет готов.
jQuery, подчеркивание, магистраль, jQuery UI — все это модули AMD. jquery-layout не совместим с AMD, поэтому конфигурация shim. Это зависит от ui.core и ui.draggable пользовательского интерфейса JQuery согласно их документам.
Чтобы все это не звучало слишком абстрактно, здесь приведена демонстрация jquery -макетный плагин.
Я «потратил» более 8 часов, пытаясь понять это напрасно, любая помощь в том, как это исправить, спасла бы мой день. Скорее всего, это потребует лишь некоторого исправления моей конфигурации прокладки в файле сборки.