2012-05-03 5 views
1

То, что я сейчас делаю, когда связывание же элемент с несколькими действиями в нокауте является:Multiple событие связывания ярлык

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

Мой вопрос: Есть ли какие-то быстрого нотации, которые могут быть использованы при связывании к действиям?

Я бы ожидать что-то вроде:

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

ответ

5

Существует не встроенный ярлык, чтобы сделать это, но это очень простой в использовании пользовательского связывания, чтобы сделать ваш data-bind чище.

Существует несколько подходов, которые вы могли бы предпринять. Одним из решений конкретных щелкать и 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"

+0

thx для ответа Райан. этот подход хорош, и я, вероятно, буду использовать его для своей проблемы. Но мне кажется, что привязкаHandlers станет огромной в случае различной комбинации событий (например: swipe + doubleclick, doubletap + doubleclick и т. Д.) –

+0

Вероятно, будет использовать обычный длинный подход tho '. Chrome не желает иметь дело с этим типом привязки :) Ошибка в обработчике событий для 'undefined': INDEX_SIZE_ERR: DOM Exception 1 undefined event_bindings: 207 chrome.Event.dispatch event_bindings: 207 chromeHidden.Port.dispatchOnMessage разное_обывает: 250 –

+0

@NazarGargol просто любопытно, если вы можете воспроизвести свою ошибку в jsFiddle. Не должно быть иначе, чем делать длинную форму: http://jsfiddle.net/rniemeyer/aLtds/ –

0

По крайней мере Knockout 2.1.0 (и по-прежнему работает с 3.4. 2) можно использовать:

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