У меня есть два массива для моей веб-страницы - первый список всех доступных элементов, а второй - отфильтрованный список, заполненный конкретными элементами из первого списка. Второй список заполняется, щелкнув элемент и вызвать функцию перебрать ищем конкретные данные:Как «синхронизировать» два массива с использованием выбитого нокаута?
self.populate = function() {
self.visibleEmails([]);
for (var i = 0; i < self.emails().length; i++) {
if (self.emails()[i].folder() == this.name) {
self.visibleEmails.push(self.emails()[i]);
}
}
}
Это прекрасно работает, однако если изменить главный массив всех элементов, я должен нажать снова заселить второй массив, так как он не знает, что какие-либо изменения были сделаны. Я читал о вычисленных наблюдаемых, которые могли обновить наблюдаемые, если бы изменения были внесены в зависимость, поэтому мне было интересно, возможно ли это в этом случае?
Для полного взгляда на моем приложении вы можете проверить его здесь:
http://jsfiddle.net/s0dhzd2t/55/
Если вы посмотрите на пример, вы можете увидеть, что я имею в виду, если вы пытаетесь удалить или переместить элемент (s). Это технически работает, но вам нужно снова щелкнуть папку слева, чтобы увидеть изменения!
Итак, я кладу это в моем .populate наблюдаемым? Извините за мое высокомерие, но я довольно новичок в нокауте, и я хочу убедиться, что я делаю это правильно. Любой шанс, который вы могли бы показать мне в моем jsFiddle, чтобы я мог точно видеть, как он должен выглядеть? –
В принципе, вы сделали бы это [как это] (http://jsfiddle.net/kevinvanlierde/s0dhzd2t/56/), путем (1) добавления наблюдаемого 'selectedFolder' (обладающего свойством name), (2) переноса вашего фильтра логику внутри 'visibleEmails', вычисленный наблюдаемый и (3) изменение функции' populate', чтобы просто обновить 'selectedFolder' – Tyblitz
Большое вам спасибо, это имеет смысл сделать так! –