2017-02-01 9 views
0

クラスごとにdijit要素を取得したいと考えています。これらのdocsに基づいて、以下のコードを試しました。私はいくつかのマップ関数のdijit/form/ToggleButtonsをdijit/Toolbarにいくつか持っており、私はトグルを解決しようとしています。 'キャッチされない例外TypeErrorを::dijit.registry.byClassは関数ではありません' 私はthis docs pageいくつかの追加に気づい:クラスごとにdijit要素を取得する

<div class="toolContainer"> 
    <div class="navBarClass" id="navToolbar" data-dojo-type="dijit/Toolbar" data-dojo-props="region:'top'" style="background-color:#ffffff;"> 
    <button type="button" id="zoomin"></button> 
    <button type="button" id="zoomout"></button> 
    </div> 

</div> 

UPDATE

require([ 
    "esri/geometry/Extent", 
    "esri/toolbars/navigation", 
    "dojo/on", 
    "dijit/registry", 
    "dijit/Toolbar", 
    "dijit/form/Button", 
    "dijit/form/ToggleButton" 
    //"dojo/domReady!" 
], 
function (Extent, Navigation, on, registry, Toolbar, Button, ToggleButton) { 


    var navToolbar; 

    navToolbar = new Navigation(window.myMap); 


    var zoomInButton = new ToggleButton({ 
    label: "Zoom Avant", 
    showLabel: false, 
    iconClass: "zoominIcon", 
    checked: false, 
    onClick: function() { 
     //alert("test button clicked") 
     navToolbar.activate(Navigation.ZOOM_IN); 
     toggleButtonIcon(this); 
    } 
    }, "zoomin"); 
    zoomInButton.startup(); 

    var zoomOutButton = new ToggleButton({ 
    label: "Zoom Arrière", 
    showLabel: false, 
    iconClass: "zoomoutIcon", 
    onClick: function() { 
     //alert("test button clicked") 
     navToolbar.activate(Navigation.ZOOM_OUT); 
     toggleButtonIcon(this); 
    } 
    }, "zoomout"); 
    zoomOutButton.startup(); 


    //this toggles the button highlight in the toolbar to show which tool is currently active 
    //note - doesn't do the FullExtent since it's a button not a togglebutton 
    function toggleButtonIcon(tool) { 
    //only the tools in the toolbar are dijit togglebuttons so can iterate thru them 
    dijit.registry.byClass("dijit.form.ToggleButton").forEach(function(togbtn) { 
     if (togbtn == tool) { 
     togbtn.attr("checked", true); 
     } 
     else { 
     togbtn.attr("checked", false); 
     } 
    }); 
    } 
}); 

HTMLの問題は、私が取得しています、です情報が関連している可能性があります。私は今、私の選択肢が何であるかについて混乱しています。私dojo /クエリを使用して探しています。私はクラスに基づいて他のボタンとわずかなボタンを区別できる必要があります。エラーで説明したように

Note that for backwards compatibility, the dijit.registry global variable (as opposed to the dijit/registry module) includes array iterator methods (forEach, filter, byClass, map, every, and some). However, AMD code should not expect these functions to be available in the Object returned from require([“dijit/registry”]).

答えて

2

thisが機能していることを理解する必要があります。ここでは、2つの方法が連鎖しています。完全なコールがある:

dijit.registry.forEach(function(w){ 
    w.containerNode.appendChild(dojo.create("div")); 
}).byClass("dijit.Dialog").forEach(function(w){ /* only dijit.Dialog instances */ }); 

は、第一の方法THR、dijit.registry.forEach()dijit/WidgetSetDoc)のインスタンスを返します。 dijit/WidgetSetインスタンスのメソッドはbyClassです。このメソッドは、最初のWidgetSetを、declaredClassdijit.Dialogとしたウィジェットだけを含む新しいWidgetSetインスタンスに減らします。

dijit要素をクラスごとに取得するには、dojo/queryregistry/getEnclosingWidgetの組み合わせを使用できます。まず、クラスを使用してウィジェットのすべてのDOMノードを照会します。

var domNodes= query('.myClass', this.domNode); 

次に、このリストを繰り返して、各domNodeに対応するウィジェットを見つけます。

domNodes.forEach(function(domNode){ 
    var widget= registry.getEnclosingWidget(domNode); 
    //do your processing 
}); 
0

​​はそのAPIに存在しません:

Uncaught TypeError: dijit.registry.byClass is not a functionを。

あなたはできるもdijitのドキュメントから:

http://dojotoolkit.org/api/?qs=1.10/dijit/registry

あなたの代わりにdijit.registryの以下のいずれかの関数を使用することができウィジェットを見つけること:

  • byId(id)それのIDでウィジェットを探します(私はこれを使用することをお勧めします)。

  • byNode(node)が見つかりましたウィジェットを返すルートの下にたDOMNODE

  • findWidgets(root,skipNode)検索サブツリーに対応したウィジェットを返します。

関連する問題