2017-08-01 79 views
0

我有一个KendoUI组合框的MVC控件,它不会提前设置更改事件。在渲染时,页面控制器在其自己的更改事件中设置垫片&。KendoUI组合框更改事件多次运行

奇怪的是,这个事件被调用两次:

  • 当我改变所选择的项目
  • 当我从控制点击即可

enter image description here

问:什么我做错了吗?
问:难道我们应该在现有的Kendo ComboBox上覆盖改变事件吗?

MVC控制:
正如你所看到的,我这里没有定义任何客户端事件...

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

页面控制器:
而且,我只定义一次事件在这里。我也证实该事件是不是已经发射前的页面控制器设置它

$(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

那么你的问题是什么? – Orilux

+0

对不起人,但你有GOT开玩笑!我们处于危险境地吗?我们真的必须“以问题的形式回答”吗?人们能否在这里看到SIMPLE推理? 事件正在运行TWICE ....并且不应该。 –

+0

对不起,我的意思不是讽刺或任何事情。这有助于明确界定问题。 – Orilux

回答

2

我能够重现上剑道JQuery的组合框您的问题,当我通过setOptions设置事件处理程序,这是不小部件渲染后的推荐方式。相反,您应该使用documentation's example for change events中显示的“绑定”方法。

尝试改变的代码行设置你的事件处理程序,以这样的:

dictionary.instances.ddlTechnician.bind("change", that.on.change.kendoComboBox); 

这里有一个道场,显示的差异:http://dojo.telerik.com/iyEQe

希望这有助于。

+0

感谢您的帮助,man :-)奇怪的是......我无法在Kendo论坛中找到......虽然那可能只是我的错 –