2008-04-24

dojo.io.bind ではない?

現時点での最新版 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">



  1. form タグの onsubmit で return false し、送信抑止。


  2. ページの onLoad 時に init 関数内でフォームの onSubmit イベントに onSubmitTestForm を接続


  3. フォームの送信時に onSubmitTestForm が実行され、フォームの内容を伴った Post リクエストが行われる。


  4. レスポンスを受け取ると、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 件のコメント: