私は ajax ウィジェットについて本当に初歩的な質問があります。これは、私が少し前に尋ねた質問の拡張です:ピラミッドとカメレオンの ajax ウィジェット
この質問とファイル account_login_widget.pt の内容を見ると、「ウィジェット」が ${username} のような構文を使用していることがわかります。これは、ページに 1 つしかないログイン ウィジェットに対しては再び機能しますが、ページに複数回存在する可能性のあるウィジェットに対してこの「ウィジェット パターン」を使用しようとすると、すべてがうまくいきません。
次に、ajax トグル ボタンを作成します。ボタンは構成可能である必要があります。ボタンのテキストは、使用されているページに応じて変更できます。また、コールバック コードも変更できる必要があります...これもページによって異なります。さらに、複数のトグル ボタンが同じページに存在できる必要があります。
2 つの質問:
私のページにレストランのリストがあり、それぞれの横に「いいね」ボタンがあるとしましょう。レストラン ID を「post」サーバー呼び出しに渡す正しい方法は何ですか (つまり、どのように変数を JavaScript ウィジェットに渡しますか?)。
同じページで、同じ ajax トグル ボタン ウィジェットを別のコンテキストで使用したいとします。たとえば、同じページに人のリストもあり、それらを「フォロー」したいとします。ボタン テキスト変数をウィジェットに渡し、ポスト サーバー呼び出しの動作を変更する正しい方法は何ですか? (つまり: 質問 1 では restaurant.like() を呼び出したいかもしれませんが、質問 2 では person.follow() を呼び出したいと思います)
ウィジェットを表示するサンプルコードを次に示します...
<script type="text/javascript">
// plugin implementation
(function($) {
$.fn.create_ajax_toggle_button = function(csrf, name, toggle_on, url, on_text, off_text) {
return this.each(function() {
var anchor = $('<a></a>');
anchor.appendTo(this);
$(anchor).button();
$(anchor).toggle_ajax_button_text(toggle_on, on_text, off_text);
$(anchor).click(function(e) {
var form_data = '_csrf=' + csrf + '&name=' + name + '&toggle_on=' + toggle_on;
$.post(url, form_data, function(response) {
$.fn.toggle_ajax_button_text();
});
});
});
};
$.fn.toggle_ajax_button_text = function(toggle_on, on_text, off_text) {
if (toggle_on == 'True') {
$(this).toggleClass('ui-state-active');
$(this).text(on_text);
} else {
$(this).text(off_text);
}
};
})(jQuery);
// Define the entry point
$(document).ready(function() {
// YUCK!!! I really shouldn't be/can't using ${name} templating
// syntax like this. Doing this means the JS code needs to be
// loaded over and over again for each item in the list. This
// just doesn't work. :-(
$('.ajax_toggle_button_div_${name}').create_ajax_toggle_button('${csrf}', '${name}', '${toggle_on}', '${url}', '${on_text}', '${off_text}');
});
</script>
<div class="ajax_toggle_button_div_${name}"></div>
ありがとう!