В моем приложении KnockoutJS есть проблема, которую я не могу решить.По сути, я связал список с методом «ko.computed», который позволяет мне фильтровать элементы из основного списка.Я использую этот список для моего основного отображения пользователю.На каждый элемент в моем шаблоне у меня есть еще одна или несколько кнопок, которые мне нужно отобразить как кнопки JqueryUI.Кажется, я не могу найти способ правильно перерисовать кнопки в моей модели, когда вычисленные изменения вызывают изменения.
Вот очень (очень) простой пример модели фиктивного вида:
function List(items) {
var self = this;
self.allItems = ko.observableArray(items || []);
self.search = ko.observable('');
self.filtered = ko.computed(function(){
var search = self.search();
return ko.utils.arrayFilter(self.allItems(), function(item){
return item == search;
});
});
}
Мой взгляд может выглядеть так:
Search: <input type='text' data-bind='value: search' />
<ul data-bind='foreach: filtered'>
<li>
<span data-bind='text: $data'> </span>
<button>NOTICE</button>
</li>
</ul>
А вот какЯ инициализирую дисплей:
$(function(){
var vm = new List(['a', 'b', 'c', 'd', 'e', 'f', 'g']);
ko.applyBindings(vm);
$('button').button(); // <-- notice!
});
Обратите внимание, что изначально все отлично работает!Я получаю симпатичную кнопку JqueryUI при первом отображении страницы ... Однако, как только я ввожу a в поле поиска, кнопка полностью теряет свой стиль.Мне нужно найти способ снова вызвать $('button').button()
.
Есть ли внутри Knockout.js событие или обратный вызов, который я мог бы вызвать для настройки кнопок пользовательского интерфейса после запуска вычисляемого метода?
Заранее спасибо!