2012-05-10 1 views
0

У меня есть список элементов, взятых с сервера (AJAX + JSON), и фильтр статусов этих элементов, который фильтрует список. Я хочу, чтобы список обновлялся (новый запрос Ajax отправлен), как только изменяется значение фильтра. Пожалуйста, помогитеknockout.js: как обновить список (вызов сервера) в качестве значения фильтра, измененного пользователем

<select data-bind="options: statuses, value: selectedStatus"> 
    ... 
<table> 
    <tbody data-bind="foreach: items"> 
    ... 
    </tbody> 
</table> 

function Model() { 
     var self = this; 
     self.items = ko.observable(); 
     self.statuses = ko.observable(); 
     self.selectedStatus = ko.observable(); 
} 

UPDATE: Один из подхода состоит в том, чтобы подписаться на изменения selectedStatus внутри модели, как это:

self.SelectedStatus.subscribe(function() { 
      $.getJSON(...) 
}); 

Это лучший способ сделать это?

+0

Непонятный вопрос. Если вы используете AJAX, почему бы просто не обновить значения в обратном вызове? – deltree

+0

Вопрос заключается в том, как запустить обратный вызов сервера, я не хочу использовать классическое событие onchange - это фильтр для ваших данных? – deltree

ответ

1

Другой способ orgonaize обновления - просто сделать триггер вычислен наблюдаемым, который будет вызывать функцию, которая будет обновлять список

See example

Но я не уверен, что это лучший способ .. Я думаю Подпишитесь самый простой способ, но не забыл про loker для запроса ajax!

1

Одним из возможных способов является использование Computed Observables

Short Example

Таким образом, вы можете обновить ваши детали, когда выбранное значение изменилось.

+0

Отличная работа! Спасибо за образец, созданный для меня – YMC

+0

Единственное, что ваш пример не запрашивает элементы с сервера, мне нужен запрос Ajax, поэтому я не могу возвращать элементы immidiatelly, и я не могу вернуть их в функцию обратного вызова $ .getJSON для вычисленное свойство – YMC

+0

См. мой следующий пост с новым примером :) –

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

  • Нет связанных вопросов^_^