kendo ui,多个对象共享同一个视图模型时,如何获取事件源?
How to get the event source in kendo ui, when several objects share the same view model?
我有以下最小重现代码:
<!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>
一个用户可以添加多个产品。当他们这样做时,将创建一个包含产品 selection 的新下拉列表。 dropdownChange
当用户 select 下拉列表中的内容时触发事件。
但是我无法弄清楚该事件源自哪个下拉菜单。事件参数不包含任何有用的内容,并且 this
指向视图模型,这对所有下拉列表都是相同的。
理想情况下,我希望能够接收刚刚更改的下拉列表的 ID - 我需要根据列表中的哪个产品被 selected 添加到此特定下拉列表旁边的其他字段。
如何找到 'dropdownChange' 中更改了哪个下拉菜单?
不确定您需要原始 input
中的哪些信息,但 e.sender
是 KendoUI DropDown 对象,e.sender.element[0]
是 input
元素。
在以下代码段中,我修改了显示 input
name
的代码。
$(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>
我有以下最小重现代码:
<!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>
一个用户可以添加多个产品。当他们这样做时,将创建一个包含产品 selection 的新下拉列表。 dropdownChange
当用户 select 下拉列表中的内容时触发事件。
但是我无法弄清楚该事件源自哪个下拉菜单。事件参数不包含任何有用的内容,并且 this
指向视图模型,这对所有下拉列表都是相同的。
理想情况下,我希望能够接收刚刚更改的下拉列表的 ID - 我需要根据列表中的哪个产品被 selected 添加到此特定下拉列表旁边的其他字段。
如何找到 'dropdownChange' 中更改了哪个下拉菜单?
不确定您需要原始 input
中的哪些信息,但 e.sender
是 KendoUI DropDown 对象,e.sender.element[0]
是 input
元素。
在以下代码段中,我修改了显示 input
name
的代码。
$(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>