Update Webix jet App

edited January 3 in General

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

Использую 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() } }
                    ]
                }
            ],
        }
    }
}

});

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

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

Comments

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

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

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

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

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

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

  • edited January 9

    Добрый день!

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

    Например, ваша форма находится по адресу "#!/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
    Как правильно вернуться к предыдущему состоянию?
    Спасибо.

Sign In or Register to comment.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!