Update Webix jet App

Доброго времени суток! Всех с наступившем Новым годом!!!

Использую webix jet для создания интерфейса. Имеется форма для аутентификации пользователя:

define([“app”], function (app) {

return {
    $ui: {
        id: "loginWindow",
        view: "window", modal: "true", position: "center", head: "Вход в приложение",
        body: {
            view: "form",
            width: 350,
            elements: [
                { view: "text", label: "Адрес электронной почты", labelPosition: "top"},
                { view: "text", type: "password", label: "Пароль", labelPosition: "top" },
                {
                    cols: [
                         {
                             view: "button", value: "Войти", type: "form", hotkey: "enter", click: function () {
                                 app.start();
                             }
                         },
                         { view: "button", value: "Отмена",hotkey: "esc", click: function () { $$("loginWindow").hide() } }
                    ]
                }
            ],
        }
    }
}

});

Это форма вызывается из главного слоя приложения.
Я никак не могу понять, как правильно перерисовывать интерфейс, когда пользователь нажал кнопку “Войти” и аутентификация прошла успешно.
Под перерисовкой понимается отображение дополнительных элементов (кнопки, ссылки и т.д.) на главном слое приложения, которые не доступны пользователю, не выполнившему вход.

Большое спасибо за помощь!!!

Здравствуйте!

После успешной аутентификации вам нужно перенаправить пользователя на нужную страницу с помощью либо

  • app.show(url);
  • или document.location.href = url;

Конечно, пользователь может сам набрать нужный url в браузере, тем самым попытаясь зайти в приложение без логина. Для этого случая есть рекомендуемое решение, которое можно подсмотреть в соседней теме: http://forum.webix.com/discussion/comment/14959/#Comment_14959

Здравствуйте! Большое спасибо за пояснения! Соответственно после перенаправления на нужную страницу должно сработать oninit у тех элементов, которые будут на новой странице? Или если начальная часть адреса совпадает, то у этих элементов oninit не сработает? Как же в таком случае перерисовать элементы, если пользователь залогинился?

Люди!!! Подскажите как заставить обновиться определенный view, или может все сразу?

Добрый день!

Идея такова, что после авторизации надо отправить пользователя на абсолютно другую страницу.

Например, ваша форма находится по адресу “#!/login”, а стартовая страница приложения на “#!/start”. В файле “login.js” находится только форма над пустым layout. В этом случае после авторизации вам нужно вызвать app.show("/start"), где и будет то приложение, которое может видеть только зарегистрированный пользователь.

Если нужно перезагрузить текущий урл, то проще всего сделать это через dcouemnt.location.reload().

Здравствуйте! Большое спасибо за ответ! У меня идея была следующая. У всех пользователей (выполнивших вход или нет) сверху имеется toolbar. На тулбаре есть кнопочка вход. По нажатию на нее появляется форма с вводом учетных данных. При удачной аутентификации нужно на тулбар добавить контент(кнопки, меню и т.д.), а имеющийся удалить. Важно чтобы тулбар был всегда.
Решил путем добавления событий в oninit тулбара:
scope.on(app, “onLogin”, function () {
webix.ui(loginToolBarElements, $$(“myToolbar”));
});
scope.on(app, “onLogout”, function () {
webix.ui(toolBarElements, $$(“myToolbar”));
});
А при успешном входе пользователя вызываю app.callEvent(“onLogin”);

Мне показалось такое решение уместным. А Вы как считаете?

Здравствуйте!
Так же пытаюсь перегружать элементы в зависимости от поведения пользователя.
При нажатии на кнопку в родительском view
this.$scope.show("./module2")
заменяет в секции {$subview: true} на нужный модуль и отрабатывает отлично.
Но при попытке вернуть прежний модуль, который был до this.$scope.show("./module2")
я его “ловлю” через

$scope.on(app, "closeModule2", function(){
    view.$scope.show("./module1");
}

url меняется, module2 пропадает, но module1 не виден.
при попытке дописать в $scope.on
$(“module1:table”).show();
показывает таблицу первого модуля, но в консоли жалуется на ошибку:
Uncaught TypeError: Cannot read property ‘show’ of undefined
Как правильно вернуться к предыдущему состоянию?
Спасибо.