Нокаут.JS — потеря контекста?

#javascript #knockout.js

#javascript #knockout.js

Вопрос:

В следующей скрипке я хотел бы иметь возможность устанавливать selectedFruit при нажатии на один из фруктов в списке, однако, похоже, это не работает.

После нажатия на фрукт, если я проверю значение ViewModel.selectedFruit в окне Chrome immediate, появится сообщение о том, что значение присваивается объекту ViewModel, а не привязанному элементу данных. Что я делаю не так? Похоже, что где-то происходит потеря контекста?

Ссылка на JSFiddle

Спасибо

Заключение

Хотя это помогло отследить проблему, с которой я столкнулся в моем основном приложении, основная проблема заключалась в том, что в спешке я забыл использовать привязку шаблона KO foreach к моему <UL> и вместо этого использовал templ foreach.

Ответ №1:

Ваша viewModel переменная не имеет глобальной области видимости, поскольку для параметров скрипта установлено значение onLoad для способа загрузки JavaScript. Если вы переключите его на no wrap (body) , то будете в хорошей форме.

Единственное другое изменение заключается в том, что вы можете просто использовать $data напрямую, а не $data() .

http://jsfiddle.net/rniemeyer/LXssJ/10/

Комментарии:

1. Большое спасибо — я знал, что это будет что-то тривиальное. Спасибо за ваши усилия и над KnockMeOut — я постоянный посетитель.