2015-07-13 3 views
0

Я пытаюсь иметь кучу кнопок, которые, когда вы нажимаете кнопку, сообщают вам свое имя. В настоящее время мой код выглядит следующим образом:Knockout JS Несколько кнопок, каждый из которых имеет функцию щелчка

HTML:

<ul data-bind="foreach: items"> 
    <button data-bind="text: name, click: alertName(name)"></button> 
</ul> 

JS:

ko.applyBindings({ 
    items: [{"name":"Burt"},{"name":"Sam"},{"name":"Greg"}] 
}); 

function alertName(name){ 
    alert(name); 
} 

Я бегу в горсть ошибок:

Uncaught ReferenceError: Невозможно обработать связывание "foreach: function() {return items}"

Сообщение: невозможно обработать bindin г "нажмите: функция() {возвращение alertName (имя)}"

Сообщение: alertName не определен

Есть простой способ для достижения этой цели в knockoutjs? У меня есть jsfiddle здесь: http://jsfiddle.net/hny7295e/

+1

Если вы еще не сделали, я настоятельно рекомендую проверить официальный учебник KNOCKOUT, если вы собираетесь делать KO работу. http://learn.knockoutjs.com/#/?tutorial=intro –

ответ

1

Вам следует создать ViewModel. Взгляните на документацию по адресу ViewModels. Метод alertName должен быть на этом ViewModel. Поскольку метод не относится к отдельному элементу, вам необходимо использовать $parent.alertName(). Текущий элемент в цикле будет передан нокаутом в метод alertName.

function ViewModel() { 
    var self = this; 

    self.items = [{"name":"Burt"},{"name":"Sam"},{"name":"Greg"}]; 

    self.alertName = function (item) { 
     alert(item.name); 
    }; 
} 

var viewModel = new ViewModel(); 

ko.applyBindings(viewModel); 

JsFiddle

Смежные вопросы