ページヘッダーで JQueryUI.js を呼び出し、AJAX でコンテンツをロードします。
Jquery のドラッグ アンド ドロップが 1 回機能すると、機能しなくなります。すべてのAJAXコンテンツロードでJqueryUI.jsを使用すると動作しますが、非常に遅くなります。これは YII フレームワークにあります
したがって、全体は次のようになります。
Page.php:
$cs->registerScriptFile($baseUrl . '/js/jquery.ui.js');
$cs->registerScriptFile($baseUrl . '/js/product.js');
product.js:
// need to namespace this to get access to jquery.ui.js sortable function
(function($) {
SORTABLE = {
mySortable: function(inputId) {
$('#sortable-list-left').sortable();
$('#sortable-list-right').sortable();
}
};
}(jQuery));
$(document)
.ready(function() {
function loadRecord(id, sku) {
$.ajax({
data: "id=" + id + "&sku=" + sku + "&project_id=" + urlParam("project"),
url: "/product/ajaxGetRecord",
type: "POST",
success: function(response) {
// process JSON response
var obj = jQuery.parseJSON(response);
// update the html with the new info
$("#productForm")
.html(obj.form);
(function() {
SORTABLE.mySortable(urlParam("project"));
})();
}
});
});
_pagePartial.php :
<div id="productForm">
// dynamic content filled in here
</div>
この名前空間戦略は、他のすべての JS では機能しますが、Jquery.ui.js では機能しません。並べ替え可能なメソッドが適用され、1 回ドラッグ アンド ドロップできますが、機能しなくなります。
理想的ではない作業オプションは次のとおりです。
_pagePartial.php :
// called every single ajax update ... ugh!
$cs->registerScriptFile($baseUrl . '/js/jquery.ui.js');
$('#sortable-list-left').sortable();
$('#sortable-list-right').sortable();