使用 Knockout 将任何键(通过键码)绑定到操作

2024-03-07

我正在寻找一种方法将许多不同的键绑定到我的视图模型中的不同操作/功能。

我找到了这个example http://geekswithblogs.net/michelotti/archive/2011/10/11/knockoutjs-custom-binding-for-invoking-an-action-with-enter-key.aspx其中绑定处理程序用于将操作绑定到回车键。

但是如何修改此处理程序以支持提供的键代码呢?我希望能够对所有类型的键使用相同的处理程序,并且最好还与修饰键结合使用。

ko.bindingHandlers.executeOnEnter = {
    init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
        var allBindings = allBindingsAccessor();
        $(element).keypress(function (event) {
            var keyCode = (event.which ? event.which : event.keyCode);
            if (keyCode === 13) {
                allBindings.executeOnEnter.call(viewModel);
                return false;
            }
            return true;
        });
    }
};

你可以这样做:

ko.bindingHandlers.actionKey = {
    init: function(element, valueAccessor, allBindings, data) {
        var handler = function(data, event) {
            var keys = ko.utils.unwrapObservable(allBindings().keys) || [13]; //default to Enter Key
            if (!Array.isArray(keys))
                keys = [keys];
            if (keys.indexOf(event.keyCode) > -1) {
                valueAccessor().call(data, data, event);
            };
        };
        var newValueAccessor = function() {
            return { keyup: handler };
        };
        ko.bindingHandlers.event.init(element, newValueAccessor, allBindings, data);
    }
};

你可以像这样使用这个绑定:

Observable Keys: <input data-bind="actionKey: action, keys: keyCodes" /><br/>
Inline Keys: <input data-bind="actionKey: action, keys: [33, 34]" /><br/>
Inline Key: <input data-bind="actionKey: action, keys: 33" /><br/>
Default Keys: <input data-bind="actionKey: action" /><br/>

Here is a fiddle http://jsfiddle.net/tyrsius/SuaNe/1/证明了这种绑定。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Knockout 将任何键(通过键码)绑定到操作 的相关文章

随机推荐