Я пытаюсь связать событие click с элементом списка. Когда я нажимаю на элемент списка ниже, он должен запустить функцию updateCurrent
в javascript, но ничего не делает.knockout 'click' binding not working
Примечание: Я использовал $parent.updateCurrent
как я нахожусь в currentCat
контексте, когда я звоню функция и функция updateCurrent
находится в ViewModel
контексте.
HTML:
<div id="wrap" data-bind="with: currentCat">
<div id="names">
<ul data-bind="foreach: $parent.catNames">
<!--Here, clicking on name doesn't fire updateCurrent-->
<li data-bind="text: $data, click: $parent.updateCurrent"></li>
</ul>
</div>
</div>
JS:
var viewModel = function() {
var self = this;
this.catNames = ko.observableArray([]);
this.catList = ko.observableArray([]);
//cats is defined as a simple array of objects, having name
cats.forEach(function(catObject) {
self.catList.push(new cat(catObject));
self.catNames.push(catObject.name);
});
//initially, set the currentCat to first cat
this.currentCat = ko.observable(this.catList()[0]);
//should run when the user click on the cat name in the list
this.updateCurrent = function() {
console.log("hello");
}
};
Я не получаю ошибку, когда я нажимаю на имя списка, но консоль ничего не войти.
Я считаю, что я не использую контекст должным образом, но не могу понять здесь точный вопрос. Любая помощь будет оценена.
Try $ корень вместо $ родителя –
Это сделали волшебство! Большое спасибо @ViktorKukurba – akshayKhot
Хмм, интересный вопрос. Комментарий ВиктораКукурбы - это быстрое решение, но я совершенно удивлен, что KO не может решить '$ parent', как ожидал OP (и I). – Jeroen