так что, если я правильно понимаю, вы хотите нажать «обновить», это вызовет некоторые вызовы ajax, и данные, возвращенные из этих вызовов, полностью заменят старые данные.
Один из способов - убедиться, что каждый звонок работает независимо для других. Например, что-то вроде того, что я быстро предложил в комментарии: делайте каждый вызов отдельным, а когда один вызов возвращает новые данные, удалите старые данные из массива и добавьте новые. Это предполагает, что вы можете различать элементы, возвращаемые различными вызовами.
другой способ - вообще избежать нескольких вызовов, вы можете заблокировать взаимодействие с пользовательским интерфейсом до конца (например, с помощью плагина jquery blockui или чего-то подобного), или если вы хотите позволить пользователю продолжать использовать интерфейс во время обновления таким образом, вы можете просто избежать запуска нового запроса, пока некоторые еще находятся в полете.
оба способа должны знать, когда начинается серия запросов, но это легко: это происходит при запуске метода «LoadData». Зная, когда все завершенные запросы немного сложнее, возможно, есть лучший способ, если нет, вы можете создать счетчик, увеличивая его на 1 для каждого запускаемого вами запроса ajax, а затем для каждого завершенного запроса «выдвигайте» новые данные. на observableArray и уменьшите счетчик (в jquery я бы использовал «полный» обратный вызов, потому что он гарантированно вызывается даже в случае ошибки). в самом начале «LoadData» (даже до очистки массива) добавьте тест:
if (counter > 0) return;
Если вы используете метод «blockui», вы должны проверять счетчик в каждом «завершенном» обратном вызове после его уменьшения, если он равен нулю, пора разблокировать UI (опция «blockui» нуждается в некоторой работе, чтобы избежать выполнения UI). в viewModel).
Если я все еще что-то упускаю ...