0

この関数を介して、静的に定義された dojox.mobile.RoundRectList ウィジェットの下に一連の dojox.mobile.ListItem ウィジェットを動的に構築しています...

function displayOpps(items) {

// Create the list container that will hold application names
var rrlOppsContainer = dijit.byId("rrlOpps");   
// Add a new item to the list container for each element in the server respond
for (var i in items){

    // Create and populate the list container with applications' names
    var name = items[i].CustName + " - " + items[i].OppNbr;
    var liOpps = new dojox.mobile.ListItem({
        label: name,
        moveTo: "sv3OppDetail"  
    });

    // Add the newly created item to the list container
    rrlOppsContainer.addChild(liOpps);
}

}

HTMLファイルでonLoad()中にこのコードを実行すると、Chromeの開発ツールを使用して次のエラーが発生します...

キャッチされていない TypeError: オブジェクト # にはメソッド 'byId' がありません

このトピックに関する多くの記事を読みましたが、多くの人がこの問題を抱えているようですが、私が見つけたそれぞれは他のテクノロジー (Spring MVC など) に関連しており、私はそれを使用しようとしています。 dojox.mobile ベースのアプリ。そうは言っても、これをhtmlファイルに含めることで、他の人が提起したソリューションのいくつかを模倣しようとしましたが、それでも機能しません...

<script type="text/javascript"
data-dojo-config="isDebug: true, async: true, parseOnLoad: true"
src="dojo/dojo.js">
dojo.require("dojox.mobile.RoundRectList")
</script>

私は何を間違っていますか?

お時間と専門知識をお寄せいただきありがとうございます。

4

1 に答える 1

3

Dojo 1.7 以降を使用している場合は、おそらく「dijit/registry」モジュールを要求するのを忘れているだけです。これは、byId 関数が定義されている場所です。デスクトップ・ウィジェットを使用する場合、これは他の基本モジュールによって間接的にロードされますが、dojox/mobile では明示的にロードする必要があります (dojox/mobile は、コードのフットプリントを最小限に抑えるために、デフォルトで非常に最小限のモジュールのセットのみをロードするため)。

アプリケーションの作成方法に応じて、次のようにします。

dojo.require("dijit.registry");  // legacy (pre-1.7) loader syntax
...
var rrlOppsContainer = dijit.byId("rrlOpps");
...

またはこれ:

require(["dijit/registry", ...], function(registry, ...){ // 1.7+ AMD loader syntax
    ...
    var rrlOppsContainer = registry.byId("rrlOpps");
    ...
});


また、2 番目のコード サンプルでは、​​従来のローダー構文を使用しながら、非同期読み込み (async: true) を使用しようとしていることにも注意してください。これは機能しません。非同期ロードを取得するには、AMD 構文を使用する必要があります。

于 2012-07-09T07:57:24.363 に答える