私は簡単にサーバー側にカメレオンとピラミッドを背にしたajax 'ウィジェット'を作成したいと考えています。ピラミッドとカメレオンのajaxウィジェット
Pyramidは、ウィジェットの作成を容易にする配管コードを提供していますか?
私の現在のアプローチは、レンダラーとしてhome.ptを使用するホームビューです。 home.ptは、ページ構造を定義し、home.ptが満たすためのスロットを提供するマクロbase.ptを使用します。 base.ptは私が書いたログインウィジェットマクロも使用しています(下のaccount_login_widget.pt参照)。
理論的には、これはすばらしい音です...私は多くのページで使用できる再利用可能なログインウィジェットを持っていますが、私の現在のアプローチはあまりうまく機能しません。私のログインウィジェットはレンダラー(サーバーが定義する必要がある)で$ {username}のような変数を使います。私はログインウィジェットとそのレンダリングを可能な限り独立させたい。しかし、現在の私のやり方では、ホームビューコードはログインウィジェットのニーズを認識し、ユーザー名、フォームレンダーおよびその他の変数を辞書に提供する必要があります。確かによくない...
私は、任意の考え
...私は正しい考えに近いんだように感じるが、いくつかのことを行方不明?
base.pt:
<html>
<head></head>
<body>
<div id="container">
<div id="header">
<span metal:use-macro="load: account_login_widget.pt"></span>
</div>
<div id="middle">
<span metal:define-slot="content"></span>
</div>
<div id="footer"></div>
</div>
</body>
</html>
home.pt:
<div metal:use-macro="load: base.pt">
<span metal:fill-slot="content">
<div>my stuff</div>
</span>
</div>
account_login_widget.pt:
<span metal:define-macro="account_login_widget">
<script type="text/javascript">
(function($) {
$.fn.my_function = function() {
$('#login_form').submit(function(e) {
e.preventDefault();
// ajax call
$.post(some_url, some_data, function(response) {
$('#account_login_widget').html(response);
});
};
return this;
};
})(jQuery);
// Define the entry point
$(document).ready(function() {
$(document).my_function();
});
</script>
<div id="account_login_widget">
<div id="login_bar" tal:condition="not username">
${form_renderer.begin(...)}
... my form ...
${form_renderer.end()}
<span tal:condition="login_failed">Login failed</span>
<div id="forgot_password_link"><a href="#">Forgot Password?</a></div>
<div id="create_account_link"><a href="${signup_url}">Create Account</a></div>
</div>
<div tal:condition="username">
Welcome <strong>${username}</strong>! <a href="${logout_url}">Logout</a>
</div>
</div>
</span>
私の現在の考えは、すべての私のビューが拡張されるBaseViewクラスを持つことです。このBaseViewクラスでは、私のウィジェットのビューオブジェクトを受け取り、すべての変数の依存関係を私のビューが最終的に返されるdictに追加するウィジェットメソッドを追加することができます。 – lostdorje