2

以下脚本呈现 Kendo UI 组合框控件的必填字段背景颜色。虽然这个脚本工作得很好,但我觉得很难理解。

据我所知,它首先将自定义属性或方法附加_input到 Kendo ui 组合框对象并分配给新变量_originalFunction,但不是使用此变量,而是在下一行中再次使用此链接对象,我并没有真正得到并将从侦听事件的匿名函数返回的结果分配给 this。

一般来说,我并不真正了解这个函数内部发生了什么以及返回值是什么。

有人可以用我能理解的方式解释吗?

(function ($) {
    var _originalFunction = kendo.ui.ComboBox.fn._input;
    kendo.ui.ComboBox.fn._input = function (e) {
        var result = _originalFunction.call(this, e);
        if (this.input) {
            this.input.addClass('required');
        }
        return result;
    }
})(jQuery);
4

2 回答 2

1

这里发生的事情是,_input来自剑道的ComboBox库得到了增强,可以required向输入元素添加一个类。

如果您在赋值行中使用_originalFunction而不是,kendo.ui.ComboBox.fn._input那么您只是更改局部变量的值_originalFunction,而不是 kendo 引用的函数

(function ($) {
    var _originalFunction = kendo.ui.ComboBox.fn._input; // store the original function to a variable so that it can be called later
    kendo.ui.ComboBox.fn._input = function (e) { // overwrite the _input  function
        var result = _originalFunction.call(this, e); // call the original function to apply default functionality
        if (this.input) { // additional functionality is added here
            this.input.addClass('required');
        }
        return result;
    }
})(jQuery);

原始方法接受单个参数,因此当我们调用原始方法时,我们需要使用与预期相同的上下文和参数,这就是 line 的原因_originalFunction.call(this, e)。但它应该写得更好,_originalFunction.apply(this, arguments)因为它可以安全地防止该方法签名的任何未来变化

于 2013-07-30T04:54:13.720 回答
0

这是修改 Kendo 的 ComboBox_input方法的行为。它将这个函数的原始值保存在变量_originalFunction中,然后给函数一个新的定义。新定义调用原始方法,保存其结果,将required类添加到组合框的输入字段,然后返回保存的结果。

于 2013-07-30T04:55:23.483 回答