0

このリンクにある ERSI マップ ビューアー プロジェクトにウィジェットを追加しています。

そこで、dijit/form/button を使用してクエリ ウィジェットを作成し、そのクリック イベントをリッスンする dojo/on イベント リスナーを実装したいと考えています。

ボタンは、html マークアップで次のように宣言されます。

<button data-dojo-type="dijit.form.Button" id="searchButton" type="button">Submit</button> 

私の JavaScript 内では、postCreate 関数の最後に次のものがあります。

on(dojo.byId("searchButton"), "click", function execute() {
    // Set the WHERE search text
    this.findParams.searchText = dojo.byId("searchText").value;
    // Sends a request to the ArcGIS REST map service resource to perform a search based
    // on the FindParameters specified in the findParameters argument. On completion, the
    // onComplete event is fired and the optional callback function is invoked.
    this.findTask.execute(this.findParams, this.showResults, this.showError);
});

TypeError: _526 is null が発生しました。私はこれを間違ってやっていることがわかっているので、エラーは無視できるようです。上記のコードとは別に、他にも何十もの試しましたが、何も機能しませんでした。

また、 dojo/on で見つけたすべての例は、この特定のアプリケーションの実行方法を示していません。

私は道場にかなり慣れていないので、別の同僚が抱えているいくつかの問題を解決できるようになるまで、このプロジェクトに参加していますが、誰かが例を示したり、DOM dijit イベントをリッスンする方法を示す例へのリンクを示したりすることができればウィジェット内で大歓迎です。

回答後の更新コード:

次の人が役立つ場合は、コードを少し変更しました。

on(this.submitButton, 'click', lang.hitch(this, 'execute'));

execute は前にリストしたのと同じ関数ですが、この行を少しきれいにするためです。

4

2 に答える 2

2

クエリ ウィジェットはテンプレート化されたウィジェットであり、WidgetsInTemplateMixin にも含まれていると想定しています。

http://dojotoolkit.org/reference-guide/1.9/dijit/_TemplatedMixin.html#dijit-templatedmixin

http://dojotoolkit.org/reference-guide/1.9/dijit/_WidgetsInTemplateMixin.html#dijit-widgetsintemplatemixin

そして、投稿した html はウィジェット テンプレートにあります。最善の選択肢は、id を使用しないことです。id を使用すると、これらのウィジェットの 1 つだけをページに配置できます。それはあなたのユースケースでは問題ないかもしれませんが、良い習慣ではありません. 代わりに、を使用してdata-dojo-attach-pointください。

<div>
    ... MORE HTML...
    <button data-dojo-type="dijit.form.Button" 
        data-dojo-attach-point="submitButton" type="button">Submit</button>
</div>

submitButtonコードで、ウィジェットの変数として参照できます。

on(this.submitButton, "click", function execute() {
    ...
}
于 2013-07-03T15:16:30.110 に答える
0

ボタン自体はウィジェットであるため、クリック イベントをインターセプトするために dojo/on は必要ありません。

ウィジェットの依存関係のリストに「dijit/registry」を入れたと仮定して、試してください:

registry.byId("searchButton").on("click", function execute() {
    // Set the WHERE search text
    this.findParams.searchText = dojo.byId("searchText").value;
    // Sends a request to the ArcGIS REST map service resource to perform a search based
    // on the FindParameters specified in the findParameters argument. On completion, the
    // onComplete event is fired and the optional callback function is invoked.
    this.findTask.execute(this.findParams, this.showResults, this.showError);
});

エラーが発生する理由は、いつ...

<button data-dojo-type="dijit.form.Button" id="searchButton" type="button">Submit</button>

... ID が「searchButton」のウィジェットを作成します。ただし、ウィジェット テンプレートがレンダリングされると、ノード自体にはその ID がなくなります。したがって、dom.byId から参照することはできません。

ウィジェットの domNode への参照が必要な場合は、次のことを行う必要があります。

registry.byId("searchButton").domNode

この fiddleを見ると、Button domNode に id がまったくないことがわかります。Firebug またはブラウザ コンソールでそのボタンの html を見ると、domNode の属性が「id=btn2」ではなく「widgetid=btn2」になっていることがわかります。

于 2013-07-03T16:26:47.887 に答える