6

ページに ComboBox があり、クライアントが文字を書き留めたときに keypress イベントを Kendo ComboBox にバインドしたいと考えています。

私が理解しているように、剣道には ComboBox のキープレス イベントがありません。

剣道には、値と機能をバインドするために次のようなものがあることがわかりました。

kendo.data.binders.slide = kendo.data.Binder.extend({
        refresh: function () {
            var value = this.bindings["slide"].get();

            if (value) {
                $(this.element).slideDown();
            } else {
                $(this.element).slideUp();
            }
        }
    });

出典:ここをクリック

しかし問題は、それを回避できず、KendoComboBox コントロールの InputBox で keypress イベントをトリガーするようにできないことです。

私はMVVMを使用していて、 $('k-input').keypress(...); のようなものは使いたくないことを思い出してください。剣道が提供するextendメソッドを操作して、実際に剣道フレームワークに何かを追加したいと考えています。

前もって感謝します。

4

2 に答える 2

13

これは私が思っていたよりも複雑でしたが、次のようにカスタム MVVM バインダーを作成して要素のkeyPressイベントにアタッチすることでこれを処理できます。input

kendo.data.binders.widget.keyPress = kendo.data.Binder.extend({
    init: function (element, bindings, options) {
        kendo.data.Binder.fn.init.call(this, element, bindings, options);
        var binding = this.bindings.keyPress;
        $(element.input).bind("keypress", function(){binding.get();});
    },
    refresh: function () {}
});

それをビューモデルの関数にバインドします。

<input data-role="combobox"
    data-text-field="text"
    data-value-field="value"
    data-bind="keyPress: onKeyPress, source: data"></input>


var viewModel = kendo.observable({
    data: [
        {text: "One", value: 1},
        {text: "Two", value: 2}
    ],
    onKeyPress: function () {
        $("#output").append("<div>keyPress</div>");
    }
});

これは動作中の jsFiddleです。

于 2013-01-27T17:14:50.260 に答える
0

次のコードを使用して、すべての ComboBox コントロールのキーダウン イベントをキャプチャできます。

kendo.ui.ComboBox.fn._keydown = function(e) {
    if (e.which == 13) {
        alert("key pressed!");
    }
};

これは、一般にキープレス イベントをサポートしない DropDownList ウィジェットでも機能します。

于 2015-07-28T16:15:30.783 に答える