2013-05-18 2 views
0

Я пытаюсь найти способ изменить событие click на всех моих элементах. Я хочу сделать что-то подобное, но я думаю, что KO связывает событие клика, которое оно фактически привязано к элементу, и поэтому изменение функции не влияет.Нокаут изменить событие click

viewModel.clickEvent = function(item){ 
    logic 
} 

viewModel.clickEvent = newFunction; 

<div data-bind="click: clickeEvent">MyButton</div> 

Я считаю, что мне нужно использовать делегатов, но с трудом выяснять, как это сделать. Может ли кто-нибудь опубликовать базовый пример того, как это сделать с нокаутом?

+2

Ваш пример -except для некоторого синтаксиса problems- работает, как ожидалось. См. [Эта скрипка] (http://jsfiddle.net/jeroenheijmans/jMGwj/). Чего вы пытаетесь достичь? Не могли бы вы изменить свой вопрос и быть более конкретным, сделать * рабочий * пример, который более четко демонстрирует вашу проблему? – Jeroen

+0

Извините, конечная цель состояла в том, чтобы иметь возможность выставлять событие KO click, чтобы я мог изменить логику во время выполнения. Моя первая попытка состояла в том, чтобы просто установить функцию viewmodel, но это не сработало. Решение, которое я выбрал, - это путь, который я, наконец, пошел. Спасибо за вашу помощь! – MrB

ответ

1

Если я понял правильно. Вы можете создать фальшивый обработчик событий, который вы можете изменить без изменения фактического обработчика событий, привязанного к представлению.

var viewModel = { 
    clickEvent : function(item){ 
     if(this.changableClickEvent) 
      this.changableClickEvent(item); 
    }, 
    changableClickEvent : null 
} 

viewModel.changableClickEvent = function(){ 
    // logic 
    alert('logic'); 
} 

ko.applyBindings(viewModel); 

See fiddle

+0

cool thanks ya Я закончил делать что-то подобное, но я чувствовал, что это был взлом и продолжал читать о делегатах и ​​тому подобное. Это кажется намного проще! – MrB

Смежные вопросы