Я использую Almond и оптимизатор r.js, чтобы объединить все мои скрипты в одном файле для одного приложения на одной странице Backbone.js.requirejs - конфигурация прокладки
Мой файл сборки:
({
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-макета:
define(['backbone', 'underscore', 'jquery.layout'], function(Backbone, _) {
\t '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 widget) не инициализируется в то время, когда объявлен плагин jquery-layout.
Это означает, что, возможно, виджет не загружается. Поэтому я проверил объединенный исходный файл и заметил, что код JQuery UI Draggable появляется перед кодом плагина jquery-layout, что означает, что зависимости вставлены в правильном порядке. Печать $.fn.draggable
в консоли Firebug также показывает, что виджет доступен, по крайней мере, после того, как документ готов.
jQuery, подчеркивание, позвоночник, пользовательский интерфейс jQuery - все модули AMD. В jquery-layout нет совместимости с AMD, отсюда и настройка прокладки. Это зависит от ui.core JQuery UI и ui.draggable per their docs.
Чтобы все это не звучало слишком абстрактно, here является демонстрацией плагина jquery-layout.
Я «потратил впустую» в течение 8 часов, пытаясь понять это напрасно, любая помощь в том, как исправить это, спасет мой день. Скорее всего, это связано только с некоторыми исправлениями моей конфигурации shim в файле сборки.
«Таким образом ui.draggable зависимость JQuery UI инициализируется перед кодом, не являющихся AMD-осведомленных плагин нагрузки» Ну, это именно то, что ваш 'shim' конфигурации в вашем вопросе * должен * делать. С информацией, которую вы предоставляете в вопросе и в ответе, нет ничего, что указывало бы, почему 'shim' не должен давать вам желаемые результаты. (У вас есть этот 'shim' в вашей конфигурации времени выполнения * тоже *, правильно?) – Louis
Прокладка определяет зависимости и порядок их включения в окончательный скрипт. Это всегда срабатывало. Плагин, не поддерживающий AMD, ссылается на '$ .fn.draggable' во время разбора (см. Строку 302 в своем исходном коде: https://github.com/allpro/layout/blob/master/source/stable/jquery. layout.js # L302), в это время '$ .fn.draggable' недоступен, поскольку плагин jQuery UI еще не инициализирован. Что такое «конфигурация времени выполнения»? Я объединять файлы в большом скрипте и просто использовать этот скрипт, даже в разработке. Gulp watch запускает оптимизатор r.js, когда я изменяю файлы JS. –