knockoutjs: добавить функцию в viewmodel
Вот как я добавляю функцию ClickAction в моей viewModel
$.getJSON("api/BrowseCategory/Get", function (data) {
categoryViewModel = ko.mapping.fromJS(data);
categoryViewModel.clickAction = function () {
alert('hi');
}
ko.applyBindings(categoryViewModel, $('.categories-gallery .frame').get(0));
});
но когда я пытаюсь вызвать эту функцию. Я получаю сообщение об ошибке "Ошибка: невозможно проанализировать привязки. Сообщение: ReferenceError: clickAction не определено;"
Вот как я вызываю функцию.
<section class="categories-gallery">
<div class="holder">
<div class="frame">
<article class="category-spacer"></article>
<!-- ko foreach: $data -->
<!-- ko foreach: ProductVariants -->
<article class="category" data-bind="click: clickAction,attr: { 'data-uuishlist-product-variant': JSON.stringify(ko.mapping.toJS($data)) }, css: { active: (($parentContext.$index() * $parent.ProductVariants().length) + $index()) == 1 }">
</article>
<!-- /ko -->
<!-- /ko -->
</div>
</div>
</section>
Я использую плагин отображения knoutoutjs, чтобы сделать viewmodel из объекта json. так как я могу вызвать функцию по нажатию?
1 ответ
Внутри foreach
цикл, вы привязываетесь к свойствам текущего элемента массива. Тем не менее, вы можете использовать специальные переменные $parent
, $parents
, а также $root
связываться с объектами с более высоких уровней.
В вашем случае вы должны быть в состоянии связать против $root.clickAction
перейти к корневому представлению модели.
Дополнительная информация о специальных переменных контекста: http://knockoutjs.com/documentation/binding-context.html