Almond と r.js オプティマイザを使用して、Backbone.js ベースのシングル ページ アプリケーション用にすべてのスクリプトを 1 つのファイルに結合しています。
私のビルドファイル:
({
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'
}
}
})
バックボーン ビューで、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-layout プラグインの宣言時に (JQuery UI Draggable widget) が初期化されていないことが わかりました。
これは、おそらくウィジェットがロードされていないことを示しています。結合されたソース ファイルを確認したところ、JQuery UI Draggable ウィジェット コードが jquery-layout プラグイン コードの前に表示されていることに気付きました。これは、依存関係が正しい順序で挿入されていることを意味します。Firebug コンソールで印刷$.fn.draggable
すると、少なくともドキュメントの準備ができた後、ウィジェットが使用可能であることが示されます。
jQuery、アンダースコア、バックボーン、jQuery UI はすべて AMD モジュールです。jquery-layout には AMD との互換性がないため、shim 構成. docs ごとに、JQuery UI の ui.core および ui.draggable に依存します。
これらすべてが抽象的になりすぎないように、jquery-layout プラグインのデモを次に示します。
私はこれを無駄に理解しようとして8時間以上「無駄」にしました。これを修正する方法についての助けがあれば、私の一日を救うでしょう. ほとんどの場合、これには、ビルド ファイル内の shim 構成の一部の修正のみが含まれます。