0

私はこのコードを持っています:

<ul data-dojo-type="dojox.mobile.RoundRectList">

  <li data-dojo-type="dojox.mobile.ListItem" data-dojo-props='moveTo:"places_aroud_me_view",callback: set_placeTypeAroundMe_calback("park"),transition:"slide"'>Park</li>

  <li data-dojo-type="dojox.mobile.ListItem" data-dojo-props='moveTo:"places_aroud_me_view",callback: set_placeTypeAroundMe_calback("art"),transition:"slide"'>Art</li>

</ul>

ご覧のとおり、calback が使用されており、パラメーターを持つ特定の関数を参照しています。コードは常にすべてのコールバックですべての関数を起動するため、基本的には機能しません (コンソールログにはすべての呼び出しが次々に表示されます)。

私がこれを行う場合:

<li data-dojo-type="dojox.mobile.ListItem" data-dojo-props='moveTo:"places_aroud_me_view",callback: set_placeTypeAroundMe_calback,transition:"slide"'>Park</li>

カルバックは問題なく動作します。ワンクリック -> ワンコールバック。

だから....どうすればcalbackのjs関数にパラメータを渡すことができますか? 私がやりたいことは、グローバル js 変数値を設定して、次の dojo モバイル ビュー (クリック後) でこの変数にアクセスできるようにすることです (そして、それを何かに使用し、場所の種類をここで確認してください)。

この方法でパラメーターを渡すことができない場合、ある dojo モバイル ビューから別の dojo モバイル ビューに変数を渡す別の方法 (できればリストを使用) を知っている人はいますか?

助けてくれてありがとう。

4

2 に答える 2

1

Dojo Mobile Showcase の例の 1 つを見ることができます 。とにかく...あなたのセットアップに非常に似ています。1 つの宛先ビューを持つ複数の Li-s を含むリスト ビュー。

listitem 要素をプログラムで作成する (作成時にイベントを添付する) か、id 属性を追加して (または Dojo のクエリ機能を使用して) 後で単純に取得することができます。

function something(item){
     require(["dojo/dom-attr"], function(domAttr){
          var data = domAttr.get(item,"customattribute");//use your data
          //work with destination view
     });
}

require(["dojo/dom","dojo/on"], function(dom,on){ 
    var item = dom.byId("listitem1");
    on(item,"click", something(item));
});

これは単なる一般的な考え方です。dojo/query を使用して拡張して、すべてのリスト項目を一度にフェッチし、データを含むカスタム属性でリスト項目を拡張できます。例えば

<li customattribute="data" data-dojo-type="dojox.mobile.ListItem" ...
于 2012-10-22T19:45:27.140 に答える
0

ここにあります:

<li id="park" class="places_around_me_list" data-dojo-type="dojox.mobile.ListItem" data-dojo-props='moveTo:"places_aroud_me_view",transition:"slide"'>Park</li>

<li id="art" class="places_around_me_list" data-dojo-type="dojox.mobile.ListItem" data-dojo-props='moveTo:"places_aroud_me_view",transition:"slide"'>Art</li>


require(["dojo/dom", "dojo/query", "dojo/on", "dojo/dom-attr", "dojo/domReady"], function(dom, dquery, on, domAttr){
    node = dquery(".places_around_me_list");
    on(node, "touchstart", function(e){
        id = domAttr.get(this, "id");
        //console.log("Clicked id:" + id);
        set_placeTypeAroundMe_reference(id);
    });     
});

デスクトップでは「クリック」にイベントをアタッチする必要がありますが、モバイルではこのソリューションは、以下で説明する「コールバック」と同じ効果があります(常に最後に実行されます...)。また、アラートのようなモバイルsthでは、dojo mobile "moveTo"の動作がブロックされます...したがって、基本的にソリューションは完全ではありません。代替案はありますか?

編集:わかりました、これは携帯電話のクリックでも機能するコードです。完全に安定しているようです。

require(["dojo/dom", "dojo/query", "dojo/on", "dojo/dom-attr", "dojo/domReady"], function(dom, dquery, on, domAttr){
    node = dquery(".places_around_me_list");
    dquery(".places_around_me_list").forEach(function(item){
        on(item, "click", function(e){
        id = domAttr.get(item, "id");
        set_placeTypeAroundMe_reference(id);
        });
    });     
});

EDIT2:dojo mobileでは、このバグが発生する場合があります->タッチスクリーンから指を離す前に、完全に不要なアクションまたは応答を起動する場合があります(たとえば、指を離す前に1つのリストが新しいリストに置き換えられます)。これは役立つはずです:

on(item, touch.release, function(e){...}
于 2012-10-23T08:45:36.810 に答える