我對ajax小部件有一個真正的noob問題。這實際上是我剛纔問的一個問題的延伸:ajax widgets in pyramid and chameleon模板語言和ajax小部件
如果你看這個問題和文件account_login_widget.pt的內容,你會看到'widget'使用類似$ {username}的語法。這再次適用於一個頁面上只有一個登錄窗口小部件,但所有地獄崩潰嘗試使用這個「窗口小部件模式」的小部件,可以在頁面上多次存在。
現在我想創建一個ajax切換按鈕。該按鈕應該是可配置的:按鈕的文本可以根據其使用的頁面而改變,並且回調代碼也應該能夠被改變......再次取決於頁面。另外,多個切換按鈕應該能夠存在於同一頁面上。
2個問題:
比方說,我有我的網頁上的餐館和「喜歡」按鈕旁邊的每個列表。將餐廳ID傳遞給'post'服務器調用的正確方法是什麼(即:如何將變量傳遞給javascript部件?)。
在同一頁上,假設我想使用相同的ajax切換按鈕小部件,但在不同的上下文中。比方說,在同一頁上,我也有一個人名單,我想'追隨'他們。將按鈕文本變量傳遞到窗口小部件並更改post服務器調用行爲的正確方法是什麼? (即:在問題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>
謝謝!
感謝您的詳細答覆。這比我想要達到的要少一些,但我最終可能只是走這條路。 – lostdorje 2012-01-02 02:13:01