2013-06-28 48 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/