Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Порядок выполнения функций / 2 сообщений из 2, страница 1 из 1
21.12.2012, 17:06
    #38088543
Zick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок выполнения функций
Доброго времени. Имеется следующий код (часть модели представления для knockout.js):
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
    self.add = function () {
        var item = new Project();
        self.cancel(item); // следующий после этого код выполнится после выполнения self.cancel или не будет происходить ожидание выполнения self.cancel ???
        self.data.unshift(item);
        self.selectedItem(item);
        self.action(_ENUMS.CRUD.Add);
    };

    self.edit = function (item) {
        self.cancel(item);
        self.selectedItem(item);
        self.action(_ENUMS.CRUD.Edit);
    };

    self.cancel = function (item) {
        self.errors([]);
        switch (self.action()) {
            case _ENUMS.CRUD.Add:
                if (self.selectedItem()) {
                    self.data.remove(self.selectedItem());
                }
                self.selectedItem(null);
                break;
            case _ENUMS.CRUD.Edit:
                $.ajax(self.url + '/' + self.selectedItem().ProjectId, {
                    data: null,
                    type: 'GET',
                    contentType: 'application/json',
                    success: function (data) {
                        self.data.replace(self.selectedItem(), new Project(data.ProjectId, data.Code, data.Name));
                        self.selectedItem(null);
                    },
                    statusCode: {
                        400: function (data) {
                            var errors = $.parseJSON(data.responseText);
                            for (var i = 0; i < errors.length; i++) {
                                if (errors[i].Message) {
                                    self.errors.push(new Error(errors[i].Name, errors[i].Message));
                                }
                            }
                        }
                    }
                });
                break;
        }
    };



Смысл следующий: при переходе с добавления к редактированию, происходит отмена редактирования (запрашиваю данные для редактируемой записи с сервера, вдруг пользователь что изменил) и начинаю добавление (вставляю пустую запись в контейнер данных модели представления). По логике должно начаться добавление (смениться шаблон для вставки записи), но этого не происходит после ajax-запроса (пустая строка вставляется, но строка не переходит в режим редактирования).
...
Рейтинг: 0 / 0
22.12.2012, 18:35
    #38089220
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок выполнения функций
Zick,

в self.cancel асинхронный запрос отправляется, а значит он отпавится, выполнение функции закончится, функция-родитель тоже закончит выполнение, потом, если сервер уже ответит, отработает функция success. То есть, ждать не будет.
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Порядок выполнения функций / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]