私は本当にdojoの初心者ですが、dojoバージョン1.7.2で新しいアプリケーションの開発を始めたとき、関数に新しいAMD構文を使用したいとも思っていました。残念ながら、私はそれを取得していないようです。:-(
私が最も悩むのは、「require」ブロック内にある関数を単純に呼び出すことができないことです。たとえば、開くと、各行にいくつかのウィジェットがある動的テーブルを作成するページがあります。次に、押すたびに1つの空の行を追加するボタンがあります。
AMD構文がなければ、簡単です
。-すべての「dojo.require()」をHEADに配置
し、テーブルとウィジェットを作成するための独自の関数を作成します
。行の追加関数は、任意のグローバル変数に簡単にアクセスできます。以前の機能がいっぱいになりました
しかし、AMDでは次のようになります。
初期関数はテーブルとウィジェットを作成します:
function fillReportTable(repId) {
require(["dojo/dom-construct", "dojo/dom-attr", "dijit/form/FilteringSelect",
"dojo/data/ItemFileReadStore", "dijit/form/ComboBox", "dijit/form/DateTextBox", "dijit/form/Select", "dojo/store/Memory"],
function (domConstruct, domAttr, FilteringSelect, ItemFileReadStore, ComboBox, DateTextBox, Select, Memory) {
// a lot of code to create the table, consisting of SEVERAL functions
function createNewRow(tbl) { ...}
function function1 () {... }
function function2 () {... }
function function3 () {... }
}
これで、「空の行を追加」ボタンが独自の関数「addEmptyRow」を呼び出します。
しかし、この関数では、次のことを
行う必要があります。-各dojo-moduleに対して他のrequireを再度実行します
-「fillReportTable」関数の「内部」にある関数は使用できません。たとえば、「createNewRow」関数
function addEmptyRow() {
require(["dojo/dom-construct", "dojo/dom-attr", "dijit/form/FilteringSelect",
"dojo/data/ItemFileReadStore", "dijit/form/ComboBox", "dijit/form/DateTextBox", "dijit/form/Select", "dojo/store/Memory"],
function (domConstruct, domAttr, FilteringSelect, ItemFileReadStore, ComboBox, DateTextBox, Select, Memory) {
// a lot of code to create the table, consisting of SEVERAL functions
}
これはすべてAMDでは非常に複雑なようです。
または、ここで明らかな何かが欠けていますか?
AMDでは、コードを多くの小さな関数に分割する場合、各関数内で「必須」をもう一度やり直しますか?または、完全なリストを含む1つの「必須」内にすべての機能を配置しますか?
2番目の方法で行う場合、ウィジェットイベントからこれらの関数をどのように呼び出すことができますか?