2017-08-01 84 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論壇中找到......雖然那可能只是我的錯 –