【问题标题】:Multiple event binding shortcut多事件绑定快捷方式
【发布时间】:2012-05-12 21:16:17
【问题描述】:

在淘汰赛中将相同元素绑定到多个操作时我目前正在做的是:

data-bind="event: { click: doAction,
                    touchend : doAction}"

我的问题是:
绑定到动作时是否可以使用某种快捷表示法?

我希望是这样的:

data-bind="event: {click, touchend : doAction}"

【问题讨论】:

    标签: javascript data-binding knockout.js dom-events


    【解决方案1】:

    没有内置快捷方式来执行此操作,但使用自定义绑定很容易使您的data-bind 更干净。

    您可以采取多种方法。一种特定于 click 和 touchend 的解决方案是:

    ko.bindingHandlers.clickAndTouch = {
        init: function(element, valueAccessor, allBindingsAccessor, data) {
             var action = valueAccessor(),
                 newValueAccessor = function() {
                     return {
                         click: action,
                         touchend: action
                     }                     
                 };
    
             ko.bindingHandlers.event.init.call(this, element, newValueAccessor, allBindingsAccessor, data);      
        }        
    };
    

    然后,你会像这样绑定它:

    data-bind="clickAndTouch: doAction"

    【讨论】:

    • 感谢 Ryan 的回复。这种方法很好,我可能会用它来解决我的问题。但在我看来,在不同的事件组合(例如:滑动+双击、双击+双击等)的情况下,绑定处理程序会变得很大
    • 可能会使用正常的长方法。 Chrome 不愿意处理这种类型的绑定 :) 'undefined' 的事件处理程序错误:INDEX_SIZE_ERR: DOM Exception 1 undefined event_bindings:207 chrome.Event.dispatch event_bindings:207 chromeHidden.Port.dispatchOnMessage miscellaneous_bindings:250
    • @NazarGargol 只是好奇您是否可以在 jsFiddle 中重现您的错误。应该与长格式没有什么不同:jsfiddle.net/rniemeyer/aLtds
    • 另外,编写一个接收事件数组和动作的绑定并不难,但不确定语法会不会好很多。
    • jsfiddle.net/3S8eX - 执行双击时会出现异常(Chrome18/Chrome20)。
    【解决方案2】:

    至少因为 Knockout 2.1.0(它仍然适用于 3.4.2)所以可以使用:

    data-bind="event: {'click touchend': doAction}"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多