2017-02-09 2 views
3

Я работаю над довольно большим проектом, в котором я использую KnockoutJS (большой, поскольку в нем невозможно было бы разместить весь связанный код здесь), и сегодня я обновился от Knockout 3.4. 0 до 3.4.1. После этого я вдруг получаю множественную привязку-ошибку на каждой странице («Вы не можете применять привязки несколько раз к одному и тому же элементу»).Knockout.js 3.4.1 порождает множественные ошибки привязки

Я использую Knockout какое-то время, и я очень уверен, что я никоим образом не применяю привязки к одному и тому же элементу. Я только вызываю applybindings один раз, и я подтвердил, что это утверждение также выполняется только один раз, отлаживая этот код (а также ищем любые другие экземпляры этой функции).

После отладки этой проблемы для меня, я решил снова понизить, до Knockout 3.4.0. И, как оказалось, ошибка появляется только в последней версии, версии 3.4.1.

Кто-нибудь еще заметил это поведение? Что они изменили, чтобы вызвать это?

Даже когда я запускаю отладочную версию KO, ошибка не может сказать мне, к какому элементу он относится, что делает его безнадежным, чтобы выяснить, откуда эта ошибка.

Я также , но не, используя второй необязательный параметр при вызове applybindings (никакой целевой цели элемента), поскольку я делаю это только один раз.

+0

Вам нужно * обновить до последней версии? –

+1

Невозможно увидеть что-либо в примечаниях к выпуску (https://github.com/knockout/knockout/releases/tag/v3.4.1) Вы уверены, что не можете воспроизвести проблему в упрощенном примере? Может ли это быть связано с изменением привязки 'with'? https://github.com/knockout/knockout/pull/1415 – user3297291

+1

Да, попробуйте воспроизвести ошибку в минимальном примере – WillardSolutions

ответ

1

Через 5 месяцев после вашего вопроса кто-то поднял вопрос с той же проблемой на своем Github page. Он был исправлен here.

Brian M Ханта (один из владельцев) Комментарий:

Проблема в том, что valueAccessor() нужно назвать (если это функция), чтобы создать зависимость. Я считаю, что у меня есть правильное исправление для него в TKO (в основном if (typeof valueAccessor() === 'function') {valueAccessor()()} в цикле рендеринга), но исправление TKO не поддерживает обратный/переводить напрямую, так как использует новый стиль класса привязки.

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