2014-09-26 2 views
1

Я борюсь со странной проблемой, и у меня заканчиваются идеи.Knockout VIewModel триггеры функции внутри foreach

Проблема в том, что моя модель просмотра запускает функцию внутри foreach при щелчке. Таким образом, в этом случае, если я нажимаю на функцию div menuConnections, запускается функция testcall. Даже если я отправляю другое значение testcall (например, div id), то такое же значение отправляется, когда я нажимаю на menuConnections.

Как остановить это и заставить testcall выполнять только тогда, когда я нажимаю на TheDivWhoCalls?

+1

Не ваша проблема здесь, но это создаст несколько экземпляров '# TheDivWhoCalls'. Элементы должны быть uinique на странице –

ответ

2

Я не могу сказать наверняка, не видя реальный пример работает с ko.applyBindings, но попробуйте изменить

data-bind='click: $root.testcall("asd") 

в

data-bind='click: $parent.testcall.bind($parent, "asd") 

Объяснение:

Первый я меняю d $root - $parent. Я не знаю, что ваш $root, но его можно с уверенностью предположить, что ваш $parent является виртуальной машиной с помощью метода testcall.

Что еще более важно, то, что click: ожидает функцию, но $root.testcall("asd") вызывает функцию, возвращающую undefined. Вместо этого мы используем Function.prototype.bind, чтобы создать новую функцию от testcall с набором параметров в "asd" и this набор для $parent

+0

Эта магия отлично работает! Спасибо чувак! – Goran

+0

@Goran добавил объяснение –

0

Вам может понадобиться синтаксис привязки вместо этого. Попробуйте data-bind="$root.testcall.bind($data, 'asd')"

+0

Нет, он не вызывает testcall вообще после того, как я перейду на это. – Goran

+0

@Goran, извините, что я забыл '.bind' – Tuan

+0

даже с .bind, он не работает – Goran

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