0

私は Dojo を初めて使用し、達成しようとしていることを実行する方法に関する適切な資料や例を見つけることができないようです。既存の要素に新しいオプションを動的に追加する決定ツリー スタイル ドキュメントの作成に取り組んでいます。コードは、特定の DIV の末尾に新しいノードを追加する必要があります。これを行うには、branchID という要素の value 属性を見つける必要があります。次に、値を 1 増やし、新しい HTML をページに追加します。jQueryでは、これを使用します

$('#btnAddFork').click( function(){
    var branchID = $('#branchID').attr( 'value' );
    var newNodeHTML = "<div class='node'>new node #" + (++n) + "</div>';
    $('div#NodeDIV').append( newForkHTML );
});

このコードは、要件の変更により別のフレームワークの使用を余儀なくされる前に作成した概念実証で機能します。Dojoで次のことを試しています

require(["dojo/dom-construct", "dojo/dom", "dojo/dom-attr", "dojo/on", "dojo/domReady!"],
function(domConstruct, dom, on){
  on(dom.byId("btnAddFork"), "click", function(){
    var n = domAttr.get("branchID", "value");
    domConstruct.place("<div class='node'>new node #" + (++n) + "</div>", "NodeDIV");
  });
}); 

n に値を代入しようとしている行で、Dojo コードが死んでいます。エラー メッセージは「TypeError: オブジェクトは関数ではありません」です。エラーメッセージは、解決策を見つけるための正しい方向を示していません。domAttr.get 関数を使用して値を取得しようとしている方法だと確信していますが、これを期待どおりに機能させる方法を見つけることができないようです。Dojo はこのようなことをどのように処理しますか? ソリューションをそのように記述する必要がある方法/理由に関するドキュメントを誰かが指摘できれば、非常に役立ちます。

4

1 に答える 1

0

私はこの質問の解決策を見つけることができましたが、質問を削除する代わりに、他の人が本当に初心者レベルのエラーを犯さないように、見つけたものの詳細を提供します。問題は、requireステートメントの後に関数定義を記述していた方法でした。関数定義では、requireからの各項目を指定する必要があります(ローダーのヘルパー関数であるため、domReady!を除く)。ドキュメントを読んでいたときに、この小さな詳細を見逃しました。次のコードは、期待どおりに機能します。

require(["dojo/dom-construct", "dojo/dom", "dojo/on", "dojo/dom-attr", "dojo/domReady!"],
function(domConstruct, dom, on, domAttr){
  on(dom.byId("btnAddFork"), "click", function(){
    var n = domAttr.get("branchID", "value");
    domConstruct.place("<div class='node'>new node #" + (++n) + "</div>", "NodeDIV"); 
    domAttr.set("branchID", "value", n);
  });
});

作業コードで、関数定義にdomAttrを追加したことに注意してください。domAttrのすべてのドキュメントをおそらく4回目または5回目に読んだ後、関数定義に追加していないことに気付きました。私が読んだDojoのドキュメントは、requireステートメントの作成とその使用方法について完全に明確ではないため、最初の数回はこれを見逃していました。

于 2012-10-06T14:50:27.127 に答える