我有一个KendoUI ComboBox的MVC控件,它没有提前设置更改事件。在渲染时,页面控制器设置&填补它的'自己的变革事件。
奇怪的是,这个事件被称为TWICE:
问:我做错了什么? 问:我们应该如何在现有的Kendo ComboBox上覆盖更改事件?
MVC CONTROL:
如您所见,我不是在这里定义任何客户端事件......
@(Html.Kendo().ComboBox()
.Name("ddlTechnician")
.Filter("contains")
.Placeholder("Select Technician...")
.DataTextField("Text")
.DataValueField("Value")
.BindTo(new List<SelectListItem>() {
new SelectListItem() { Text = "Frank", Value = "1" },
new SelectListItem() { Text = "Suzie", Value = "2" },
new SelectListItem() { Text = "Ralph", Value = "3" }
})
.Suggest(true)
.HtmlAttributes(new { style = "width:300px;" }))
PAGE CONTROLLER:
而且,我只在这里定义事件ONCE。我还确认事件在页面控制器
$(document).ready(function () {
var PageController = (function ($) {
function PageController(options) {
var that = this,
empty = {},
dictionary = {
elements: {
form: null
},
instances: {
ddlTechnician: null
},
selectors: {
form: 'form',
ddlTechnician: '#ddlTechnician'
}
};
var initialize = function (options) {
that.settings = $.extend(empty, $.isPlainObject(options) ? options : empty);
dictionary.elements.form = $(dictionary.selectors.form);
// Objects
dictionary.instances.ddlTechnician = $(dictionary.selectors.ddlTechnician, dictionary.elements.form).data('kendoComboBox');
// Events
dictionary.instances.ddlTechnician.setOptions({ change: that.on.change.kendoComboBox });
};
this.settings = null;
this.on = {
change: {
kendoComboBox: function (e) {
// This is getting called MULTIPLE TIMES
console.log('kendoComboBox RAN');
}
}
}
};
initialize(options);
}
return PageController;
})(jQuery);
var pageController = new PageController({});
});
答案 0 :(得分:3)
当我通过setOptions设置事件处理程序时,我能够在Kendo JQuery Combobox上重现您的问题,这在呈现窗口小部件后不是推荐的方式。相反,你应该使用&#34; bind&#34;方法如documentation's example for change events。
所示尝试将您设置事件处理程序的代码行更改为:
dictionary.instances.ddlTechnician.bind("change", that.on.change.kendoComboBox);
这是一个显示差异的道场:http://dojo.telerik.com/iyEQe
希望这有帮助。