У меня постоянно возникают проблемы с отладкой в шаблонах KnockoutJS.
Скажем, я хочу привязать к свойству под названием " items
", но в шаблоне я делаю опечатку и привязываю к (несуществующему) свойству " item
".
Использование отладчика Chrome только говорит мне:
"item" is not defined.
Существуют ли инструменты, методы или стили кодирования, которые помогают мне получить больше информации о проблеме связывания?
источник
name
можно наблюдатьname.subscribe(function(newValue) { console.log("name", newValue); });
foreach
сценарии, и мне легче видеть их на странице в соответствующей визуализированной разметке, чем просеивать через консоль. Просто зависит от ситуации. Еще несколько моих мыслей здесь: knockmeout.net/2013/06/… . Кроме того, вы можете записать «чистую» версию в вашей привязке, какconsole.log(ko.toJS(valueAccessor())
.Если вы используете Chrome для разработки, есть действительно отличное расширение (с которым я не связан), называемое Knockoutjs context debugger, которое показывает вам контекст привязки непосредственно на панели элементов Developer Tools.
источник
Определите bindingHandler один раз , где-нибудь в ваших файлах библиотеки JavaScript.
чем просто использовать это нравится это:
преимущества
источник
Я нашел другой, который может быть полезным. Я отлаживал некоторые привязки и пытался использовать пример Райана. Я получил ошибку, что JSON обнаружил круговой цикл.
Но, используя этот подход, заменили значение привязки данных следующим:
Теперь, если я нажимаю на элемент PRE, когда открыто окно отладки Chrome, я получаю хорошо заполненное окно переменных области видимости.
Нашел немного лучший способ для этого:
источник
Пошаговое руководство
>=
значок в нижнем левом углу панели инструментов разработчика Chrome, или открыв вкладку «Консоль» на панели инструментов разработчика Chrome, или нажав Ctrl+ Shift+Jko.dataFor($0)
ko.contextFor($0)
Что это за черная магия?
Этот трюк представляет собой сочетание функции $ 0-4 $ в Chrome и служебных методов KnockoutJS . Короче говоря, Chrome запоминает , какие элементы вы выбрали в Chrome Developer Toolbar и выставляет эти элементы под псевдонимом
$0
,$1
,$2
,$3
,$4
. Поэтому, когда вы щелкаете правой кнопкой мыши по элементу в вашем браузере и выбираете «Проверить элемент», этот элемент автоматически становится доступным под псевдонимом$0
. Вы можете использовать этот трюк с KnockoutJS, AngularJS, jQuery или любым другим фреймворком JavaScript.Другая сторона хитрости - это служебные методы KnockoutJS ko.dataFor и ko.contextFor:
ko.dataFor(element)
- возвращает данные, которые были доступны для привязки к элементуko.contextFor(element)
- возвращает весь контекст привязки, который был доступен элементу DOM.Помните, JavaScript-консоль Chrome - это полнофункциональная среда выполнения JavaScript. Это означает, что вы не ограничены только просмотром переменных. Вы можете сохранить выходные данные
ko.contextFor
и манипулировать моделью представления непосредственно из консоли. Попробуйvar root = ko.contextFor($0).$root; root.addContact();
и посмотри, что получится :-)Удачной отладки!
источник
Проверьте действительно простую вещь, которую я использую:
Или
Тогда в HTML, скажем, у вас было:
Просто замените его на
Более продвинутый:
Наслаждаться :)
ОБНОВИТЬ
Еще одна неприятная вещь, когда вы пытаетесь связать с неопределенным значением. Представьте, что в приведенном выше примере объект данных просто {}, а не {value: 'some text'}. В этом случае у вас будут проблемы, но со следующей настройкой у вас все будет хорошо:
источник
Я создал проект github под названием knockthrough.js, чтобы помочь визуализировать эти ошибки.
https://github.com/JonKragh/knockthrough
Он выделяет ошибки привязки и дает дамп текстового контекста на этом узле.
Вы можете поиграть с образцом здесь: http://htmlpreview.github.io/?https://github.com/JonKragh/knockthrough/blob/master/default.htm
Благодарю Р.П. Нимейера за его превосходные примеры кода Knockout на SO, чтобы донести до меня этот момент.
источник
Самый простой способ увидеть, какие данные передаются в привязку, - это сбросить данные в консоль:
Knockout оценивает значение для привязки текста ( здесь можно использовать любую привязку ) и сбрасывает $ data на панель браузера консоли.
источник
Все остальные ответы будут работать отлично, я просто добавляю, что мне нравится делать:
По вашему мнению (если вы уже связали ViewModel):
Код нокаута:
Это приостановит код в отладчике
element
иvalueAccessor()
будет содержать ценную информацию.источник
Если вы разрабатываете в Visual studio и IE, мне это нравится больше,
data-bind="somebinding:(function(){debugger; return bindvalue; })()"
мне нравится больше, чем функция echo, так как он будет идти к сценарию со всеми привязками, а не к файлу eval, и вы можете просто посмотреть на $ context $ data (я использую это и в Chrome);источник
Это работает для меня:
источник