javascript
  • list
  • mobile
  • dojo
  • 2012-10-22 102 views 0 likes 
    0

    我有這樣的代碼:dojox.mobile.ListItem - 與點擊傳遞參數/觸摸

    <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被使用,它是指specyfic功能與參數。基本上它不起作用,因爲代碼始終啓動所有回調中的所有功能(控制檯日誌將逐個顯示所有調用)。

    如果我這樣做:

    <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函數在calback中? 我想要做的是設置一個全局js變量值,以便在下一個dojo移動視圖中(單擊後)我可以訪問此變量(並將其用於某些內容,請在此處查看地點類型)。

    如果以這種方式傳遞參數是不可能的,那麼也許有人知道其他方式將變量從一個dojo移動視圖傳遞到另一個(最好使用列表)?

    提前感謝任何幫助。

    回答

    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); 
        });  
    }); 
    

    注意,在桌面上,你需要附加事件「點擊」,而在移動該解決方案將有同樣的效果,「回調」我下面提到(總是最後會運行...)。同樣在移動...像警報將阻止道場移動「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:有時候在道場移動,你可能會得到這個錯誤 - >之前,你拿走你從觸摸屏的手指,你啓動completelly不必要的動作或性反應(例如一個列表被替換在你拿開手指之前用新的一個)。這應該有所幫助:

    on(item, touch.release, function(e){...} 
    
    +2

    不會爲此使用touchstart事件,每次嘗試滾動列表 – user1741144

    +1

    時都會導致不需要的「咔噠聲」,第二次:在dquery結果節點上進行迭代,例如, node.forEach(function(item){on。(item,「click」....使用「item」而不是「this」) – user1741144

    +0

    Oh。對不起,我沒有看到您的其他評論。是的,您是對的 –

    1

    你可以看看Dojo Mobile Showcase的一個例子: http://demos.dojotoolkit.org/demos/mobileCharting/demo.html 聲音被壓縮了一下,所以他們不會給你清晰的圖像。 無論如何... 看起來非常類似於您的設置。列表視圖與多個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 /查詢擴展它在一次獲取所有listItems中,並與包含數據的自定義屬性擴展listItems中。 例如

    <li customattribute="data" data-dojo-type="dojox.mobile.ListItem" ... 
    
    +0

    好主意。它的工作,但它是一個點點滴滴「有線」 - 有時不會做它所做的,所以如果任何人有更好的選擇,它也會很好。我將在下面提供代碼。 –

    相關問題