現時点での最新版 Dojo Toolkit 1.1.0 を使ってます。
情報は少なくないのですが実際にやってみると、どうもかみ合わないと思ったら、
Dojo Porting Guide: 0.4.x to 0.9
0.9 以降と 0.4 以前のリリース間では、後方非互換とのこと。 dojo.io.bind については、 IO Transports [AJAX] にあるように dojo.xhrXXX に変更になったみたいです。
では、HTML フォームの submit を抑止し、XmlHttpRequest する実験の続き
以下のようなコードになりました。
function receiveData(response, ioArg) {
}
function onSubmitTestForm() {
var testFormNode = dojo.byId('TestForm');
var deffered = dojo.xhrPost({
url: testFormNode.action + '.json',
handleAs: 'json',
load: receiveData,
form: testFormNode});
}
function init() {
var formWidget = dijit.byId('TestForm');
dojo.connect(formWidget , 'onSubmit', 'onSubmitTestForm');
}
dojo.addOnLoad(init);
...
...
<form id="TestForm" onsubmit="return false;" action="..." method="post" dojotype="dijit.form.Form">
- form タグの onsubmit で return false し、送信抑止。
- ページの onLoad 時に init 関数内でフォームの onSubmit イベントに onSubmitTestForm を接続
- フォームの送信時に onSubmitTestForm が実行され、フォームの内容を伴った Post リクエストが行われる。
- レスポンスを受け取ると、receiveData が実行される。
と、いう動作を firebug と デバッガ で確認できました。
嵌ったところが一箇所あって、
- dojo.connect() では、第1引数に dijit.byId() で取得したオブジェクト
- dojo.xhrPost() の form 引数には、dojo.byId() で取得した DOM node
でした。dojo.xhrPost() に、dijit.byId() を使うと、form.getAttributeNode is not a function
なんてのが firebug のエラーに捕捉されてました。
0 件のコメント:
コメントを投稿