KnockoutJS - событие клика по шаблону - PullRequest
3 голосов
/ 17 марта 2012

У меня есть следующий шаблон KnockoutJS (визуализация с jquery.tmpl):

<script id="contactsTemplate" type="text/html">
    <li data-bind="click: contactViewModel.test">${DisplayName}</li>
</script>

<ul id="contact-list" data-bind="template: {name: 'contactsTemplate', foreach:contacts}">
</ul>

и следующий ModelView:

var contactViewModel = function (contacts) {
var self = this;

self.contacts = contacts;

self.test= function () {
    console.log("CLICK");
}

, если я использую этот код, событие click нене огоньЕсли я создаю анонимную функцию, такую ​​как:

<script id="contactsTemplate" type="text/html">
    <li data-bind="click: function(){contactViewModel.test()}">${DisplayName}</li>
</script>

, я получаю следующее исключение:

Uncaught TypeError: Object function (contacts) {
 var self = this;
 self.contacts = contacts;
 self.test= function () {
     console.log("CLICK");
 }
} has no method 'test'

РЕШЕНИЕ

решение: $родитель.

data-bind="click: $parent.test"

1 Ответ

3 голосов
/ 17 марта 2012

Ваша contactViewModel функция является функцией конструктора, однако вы пытаетесь использовать ее как экземпляр объекта, созданного с помощью функции.Ваш contactViewModel предоставляет массив контактов, которые вы привязываете к шаблону contactsTemplate.По этой причине «контекст» всех привязок в этом шаблоне - это экземпляры объектов в вашем массиве.Чтобы связать функцию с родительским объектом, то есть contactViewModel, используйте родительскую псевдопеременную Knockout 2.0:

data-bind="click: $parent.test"
...