2

我试图在用户双击后从 KendoUI ListItem 的模板中获取名称。我似乎找不到获取所选项目价值的方法。警报以未定义的形式返回。

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

谢谢,

德鲁

4

1 回答 1

7

在 Kendo 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/

于 2013-06-28T22:09:27.907 回答