javascript - 当多个对象共享相同的 View 模型时,如何在kendo ui中获取事件源?

标签 javascript kendo-ui

我有以下最小重现代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Kendo UI Snippet</title>
    <link rel="stylesheet" href="http://cdn.kendostatic.com/2014.3.1316/styles/kendo.common.min.css">
    <link rel="stylesheet" href="http://cdn.kendostatic.com/2014.3.1316/styles/kendo.default.min.css">
    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    <script src="http://cdn.kendostatic.com/2014.3.1316/js/kendo.all.min.js"></script>
</head>
<body>

<div id="popup" >
  <form id="popup-editor-form">
      <div class="k-popup-edit-form k-window-content k-content" style="overflow:visible;">
          <div class="k-edit-form-container">
              <div class="k-edit-field">
                <a href="" data-bind="click:addProducts">Add Additional Products + </a>
              </div>
              <div id="additionalProducts"></div>
          </div>
      </div>
  </form>
</div>


<script>  
  var editWindow = $("#popup").kendoWindow({
      modal: true,
      visible: false,
      resizable: false,
  });

  var viewModel = {};
  viewModel.count = 0;
  viewModel.dropdownChange = function(e) {
    // I need to get the dropdown id that just have been changed here 
    alert('hello');
  }
  viewModel.source = [{Name:"Apples",productValue:"app"},{Name:"Oranges",productValue:"or"}];
  viewModel.addProducts = function() {
    var dropdownMarkup = '<div class="k-edit-label">'+
                    '<label>Product</label>'+
                '</div>'+

                '<div class="k-edit-field">' +
                    '<input name="Product Type' + viewModel.count + '" id="type' + viewModel.count + '"' +
                        'data-role="dropdownlist"' +
                        'data-auto-bind="true"' +
                        'data-value-primitive="true"' +
                        'data-option-label="<No product selected>"' +
                        'data-text-field="Name"' +
                        'data-value-field="productValue"' +
                        'data-text="Select Product..."' +
                        'data-bind="value: productValue'+ viewModel.count + ',' +
                        'source: source,' +
                        'events: { change: dropdownChange}" />' +
                '</div>';
    $('#additionalProducts').append(dropdownMarkup);
    kendo.bind(editWindow, viewModel);
    viewModel.count++;
    return false;
  }

  kendo.bind(editWindow, viewModel);  
  editWindow.data("kendoWindow").title("MyWindow");
  editWindow.data("kendoWindow").center().open();

</script>
</body>
</html>

用户可以添加多个产品。当他们这样做时,会创建一个包含产品选择的新下拉列表。当用户在下拉列表中选择某些内容时,会触发 dropdownChange 事件。

但是我无法弄清楚该事件源自哪个下拉列表。事件参数不包含任何有用的内容,this 指向 View 模型,这对于所有下拉菜单都是相同的。

理想情况下,我希望能够接收刚刚更改的下拉列表的 ID - 我需要根据从列表中选择的产品在此特定下拉列表旁边添加其他字段。

如何找到“dropdownChange”内哪个下拉列表已更改?

最佳答案

不确定您需要从原始输入中获得哪些信息,但e.sender是KendoUI DropDown对象,而e.sender.element[0]input 元素。

在下面的代码片段中,我修改了用于显示输入 名称的代码。

$(document).ready(function() {
  var editWindow = $("#popup").kendoWindow({
    modal: true,
    visible: false,
    resizable: false,
  });

  var viewModel = {};
  viewModel.count = 0;
  viewModel.dropdownChange = function(e) {
    // I need to get the dropdown id that just have been changed here 
    alert('hello:' + e.sender.element[0].name);
  }
  viewModel.source = [{Name:"Apples",productValue:"app"},{Name:"Oranges",productValue:"or"}];
  viewModel.addProducts = function() {
    var dropdownMarkup = '<div class="k-edit-label">'+
        '<label>Product</label>'+
        '</div>'+

        '<div class="k-edit-field">' +
        '<input name="Product Type' + viewModel.count + '" id="type' + viewModel.count + '"' +
        'data-role="dropdownlist"' +
        'data-auto-bind="true"' +
        'data-value-primitive="true"' +
        'data-option-label="<No product selected>"' +
        'data-text-field="Name"' +
        'data-value-field="productValue"' +
        'data-text="Select Product..."' +
        'data-bind="value: productValue'+ viewModel.count + ',' +
        'source: source,' +
        'events: { change: dropdownChange}" />' +
        '</div>';
    $('#additionalProducts').append(dropdownMarkup);
    kendo.bind(editWindow, viewModel);
    viewModel.count++;
    return false;
  }

  kendo.bind(editWindow, viewModel);  
  editWindow.data("kendoWindow").title("MyWindow");
  editWindow.data("kendoWindow").center().open();

});
<link rel="stylesheet" href="http://cdn.kendostatic.com/2014.3.1316/styles/kendo.common.min.css">
<link rel="stylesheet" href="http://cdn.kendostatic.com/2014.3.1316/styles/kendo.default.min.css">
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://cdn.kendostatic.com/2014.3.1316/js/kendo.all.min.js"></script>

<div id="popup" >
  <form id="popup-editor-form">
    <div class="k-popup-edit-form k-window-content k-content" style="overflow:visible;">
      <div class="k-edit-form-container">
        <div class="k-edit-field">
          <a href="" data-bind="click:addProducts">Add Additional Products + </a>
        </div>
        <div id="additionalProducts"></div>
      </div>
    </div>
  </form>
</div>

关于javascript - 当多个对象共享相同的 View 模型时,如何在kendo ui中获取事件源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28163913/

相关文章:

javascript - ¿调整打开的剑道窗口的大小?

Web View 中的 Android 文本输入显示第二个框

javascript - 嵌套对象和数组解构

javascript - 有 id 和 name 的 json 字符串?使用 c 锐利

kendo-ui - 如何使 KendoChart 系列填充颜色为纯色,而不是默认的半透明?

jquery - 如何在剑道窗口标题中显示字形图标?

javascript - Node .js/SAML : How to decrypt contents of RequestedSecurityToken

javascript - 选择父复选框

javascript - 如何从 Controller 返回 JavaScript?

javascript - 如何将随机脚本注入(inject)到我的 Web 应用程序中?