返された ajax データを jQuery で認識できるようにしようとしています。次のように div タグの間にコンテンツをロードすることで、ページのロード時に jQuery を操作できます。
<div id="edit-features-id">
include_partial(
'user/favoritesEditFavorites',
array('vrs_allfav_data' => $vrs_allfav_data)
);
</div>
この div タグは jQuery ダイアログに添付されます。さらに興味深いことに、ダイアログはその前のダイアログによって開かれました。説明のために、最初のダイアログ ( ListView ) と 2 番目のダイアログ ( EditMode ) だけを呼び出します。
したがって、ページがロードされると、include_partial が div タグの間に include_partial をロードするため、EditMode が開かれると、jQuery は jQuery コマンドを認識します。データを削除、変更、並べ替えできるので機能しますが、保存をクリックするまで何も起こりません。
[保存] をクリックすると、データが ajax で投稿され、データベースが更新され、成功するとアラートの確認が返されます。アラートが閉じられると、次のようになります。
- EditMode ダイアログを閉じます
- 最初の関数は ListView ダイアログの div タグを更新します
- 2 番目の関数は、EditView ダイアログの div タグを更新します
ListView は表示用であるため、保存された新しいデータをロードし、準備完了です。今回、EditMode ダイアログが ListView によって呼び出されると、EditMode でクリックしたり並べ替えたりすることができなくなったため、jQuery と対話するものは何もありません。
返されたコンテンツは EditMode ダイアログの div タグに読み込まれ、ページの読み込み時に partial_include によって読み込まれた現在の html 情報が置き換えられます。
<div id="edit-features-id"></div>
EditMode のデータを取得する次のさまざまな方法を使用して、div タグ間のコンテンツを正常にロードしました。
注: var $j = jQuery.noConflict();を使用しています。
favoritesReloadEditFavorites = function() {
$j.ajax({
url: favoritesEditFavoritesURL,
cache: false
}).done(function(html) {
$j('#vrs_favorites_edit').append(html);
});
};
またはこのように:
$j('#vrs_favorites_edit').load(favoritesEditFavoritesURL);
またはこのように:
$j.ajax({
url: favoritesEditFavoritesURL,
cache: false,
success: function(response) {
$j('#vrs_favorites_edit').html(response);
};
});
お気づきのように、それらはすべて、このアクションを呼び出すこの symfony 1.3.11 ルート「user/favoritesEditFavorites」に変換される favoritesEditFavoritesURL に移動します。
if ($request->isXmlHttpRequest())
{
// Retrieve data from db $vrs_allfav_data loaded into EditMode using renderPartial.
return $this->renderPartial(
'user/favoritesEditFavorites',
array('vrs_allfav_data' => $vrs_allfav_data)
);
}
これは、コンテンツをロードする場合にはうまく機能しますが、クリックやドラッグ アンド ドロップ機能を可能にするために jQuery と対話する必要があるコンテンツには適していません。
そうは言っても、jQuery の .on コードを次のように変更することで、jQuery のクリック機能を解決して機能を開始できるようにするソリューションを見つけることができました。
$j('.cancelEditFavorites').on('click', function() {
これに:
$j(document).on('click', '.cancelEditFavorites', function() {
残念ながら、この jquery プラグインjquery_sortableと以下のコードを使用してネストされた並べ替えを行うドラッグ アンド ドロップ別名 sortable は機能しません。
$j("ol.vertical").sortable({
group: 'favorites',
handle: '.handle',
isValidTarget: function($item, container) {
if ($item.is(".link")) {
return true;
} else {
return $item.parent("ol")[0] == container.el[0];
}
},
onDragStart: function($item, container, _super) {
if ($item.is(".folder")) {
$j('ol.vertical ol').sortable('disable');
_super($item, container);
}
},
onDrop: function($item, container, _super) {
if ($item.is(".folder")) {
$j('ol.vertical ol').sortable('enable');
_super($item, container);
}
},
});
そして最後に私の質問は、DOMによって認識されるajaxまたはその他の型呼び出しからデータをロードする方法はありますか?ページ?
ブラウザーを更新することは可能ですが、両方のダイアログが消えてしまい、エンド ユーザーは何が起こったのか考えたままになります。なぜなら、最初のダイアログを開くには再クリックして 2 番目のダイアログを再度開く必要があるからです。これはユーザー エクスペリエンスとしては良くありません。