2013-06-28 86 views
2

我試圖在用戶雙擊後從KendoUI ListItem的模板中獲取名稱。 我似乎無法找到一種方法來獲取所選項目的值。警報將以未定義的方式返回。KendoUI ListView雙擊選中的項目

<script type="text/x-kendo-tmpl" id="template"> 
     <div class="machineInstances"> 
       #:Name# [#:Environment#] #:Description# 
     </div> 
    </script> 

    $("#listView").kendoListView({ 
     dataSource: dataSource, 
     selectable: "single" 
     , dataBound: setItemDoubleClickEvent 
     , template: kendo.template($("#template").html()) 

    }); 

    function setItemDoubleClickEvent() { 
     var items = $(".machineInstances"); 
     items.dblclick(function() { 
       $("#menuInstances").click(); 
       var selected = $("#listView").data("kendoListView").select(); 
       alert(selected.Name); 
       alert("Double Click!"); 
       }); 
     } 

謝謝

德魯

回答

7

在劍道UI的ListView,select沒有回報的項目,但HTML。您應該使用index()來獲取所選元素的索引,並使用dataSource.view()來檢索當前顯示的元素。

你的代碼應該是:

function setItemDoubleClickEvent() { 
    var items = $(".machineInstances"); 
    items.dblclick(function() { 
     $("#menuInstances").click(); 
     var listView = $("#listView").data("kendoListView"); 
     var idx = listView.select().index(); 
     var item = listView.dataSource.view()[idx]; 
     alert(item.Name); 
     alert("Double Click!"); 
    }); 
} 

但我會建議代碼簡化到:

function setItemDoubleClickEvent() { 
    $(".machineInstances").on("dblclick", function() { 
     var listView = $("#listView").data("kendoListView"); 
     var idx = $(this).index(); 
     var item = listView.dataSource.view()[idx]; 
     alert(item.Name); 
     alert("Double Click!"); 
    }); 
} 

,或者使用完全不同的策略,得到同樣的結果:

var listView = $("#listView").data("kendoListView"); 
function setItemDoubleClickEvent() { 
    $(".machineInstances", listView).on("dblclick", function() { 
     var uid = $(this).data("uid"); 
     var item = listView.dataSource.getByUid(uid); 
     alert(item.Name); 
     alert("Double Click!"); 
    }); 
} 

我在哪裏得到uid的雙擊元素,然後檢索商品數據使用getByUid

另外設置listView外可以防止每次執行該函數時都要計算它。

例如:http://jsfiddle.net/OnaBai/3wQaK/