Я реализую классы SPA Kendo-UI для реализации экрана CRUD. Не вдаваясь в подробности, у меня есть наблюдаемое, у которого есть свойства, которые представляют различные «интерфейсы», например, Search, Create, Update. Если удалить весь мусор, это будет выглядеть примерно так:
var viewModel = kendo.observable({
search: kendo.observable({
filterPayload: kendo.observable({}),
init: function() {
// setup kendo-ui controls
},
show: function() {
// grid's dataSource read
}
}),
add: kendo.observable({
insertPayload: kendo.observable({}),
init: function() {
// setup kendo-ui controls
},
show: function() {
// reset the form by calling:
// viewModel.add.insertPayload.set("[property name]", null);
}
}),
update: kendo.observable({
entityId: null,
updatePayload: kendo.observable({}),
init: function() {
// setup kendo-ui controls
},
show: function() {
// Read from the database using viewModel.update.entityId
// Set the default values of the form using the results returned
}
}),
});
Где я нахожусь в состоянии гонки, находится в viewModel.update.show
Что происходит, так это то, что я настраиваю kendoMultiSelect в init
заполняет данные с сервера, но также устанавливает значения viewModel.update.updatePayload
путем нажатия сервера в show
. Это вызывает состояние гонки (иногда), когда пользователь впервые посещает интерфейс обновления, где данные, возвращаемые из базы данных для значений по умолчанию, происходят быстрее, чем настраиваемый multiSelect, в результате чего multiSelect выглядит так, как будто не выбраны никакие значения.
Есть ли какой-либо шаблон проектирования, который я могу реализовать, чтобы предотвратить это состояние гонки, или я вынужден потенциально обрабатывать logi c в «шоу» дважды?