Skip to content

Instantly share code, notes, and snippets.

@Lapple
Last active August 29, 2015 14:00
Show Gist options
  • Save Lapple/11082809 to your computer and use it in GitHub Desktop.
Save Lapple/11082809 to your computer and use it in GitHub Desktop.
Документация про инициализацию

Инициализация приложения

При использовании конфигурации по умолчанию вся инициализация сводится к вызову функции ns.init и запуску первого апдейта:

$(function() {
    ns.init();
    ns.page.go();
});

ns.init включает экшены, обрабатывает предварительно заданный роутинг и ищет в DOM ноду #app для использования ее в качестве контейнера для интерфейса. Вызов ns.page.go нужен для запуска первого глобального апдейта.

Конфигурация

Базовый путь в URL

До инициализации можно задать префиксный путь для всех ссылок. Это может пригодиться, когда ваше приложение находится не по корневому пути app.example.com, а, например, app.example.com/checkout:

ns.router.baseDir = '/checkout';

Заголовок страницы

Noscript позволяет задавать заголовок страницы, зависящий от текущего URL, при переходах внутри приложения. Переопределите функцию ns.page.title:

ns.page.title = function(url) {
    if ('/settings' == url) {
        return 'App - Account Settings'
    }

    return 'App';
};

Примечание: При необходимости, для получения параметров страницы из полученного URL можно воспользоваться функцией ns.router:

ns.page.title = function(url) {
    var params = ns.router(url).params;
    // ...
};

URL запроса моделей

По умолчанию фреймворк группирует запросы моделей, нужных для отрисовки интерфейса и запрашивает их по URL /models/ вне зависимости от ns.router.baseDir. Переопределите константу ns.request.URL для задания собственного пути:

ns.request.URL = '/models/v1/json/';

Дополнительные параметры при запросе моделей

При необходимости пробросить дополнительные параметры при запросе моделей, добавьте их в объект ns.request.requestParams:

ns.request.requestParams.token = getAuthToken();
ns.request.requestParams.version = '0.1.1';

Это приведет к отправке запросов вида:

Request URL: http://example.com/models/?_m=todos

Query String Parameters:
  _m: todos

Form Data:
  category.0: home
  token: 6a5e516725c68c
  version: 0.1.1

Условная обработка ответа моделей

Определение функции ns.request.canProcessResponse позволяет динамически заблокировать обработку ответа моделей, например, при несовпадении авторизации или рассинхронизации клиента с бекендом:

ns.request.canProcessResponse = function(response) {
    // На бекенде выехала новая версия, а текущий клиент засиделся.
    if (response.version != APP.version) {
        location.reload();
        return false;
    }

    return true;
};

Переопределение модуля Yate-шаблонов

По умолчанию для генерации разметки из шаблонов используется модуль main, однако сохраняется возможность его динамического определения в зависимости от параметров страницы и текущего лейаута:

ns.Update.prototype.render = function(tree, params, layout) {
    var module = 'main';

    if (params.context === 'setup') {
        module = 'setup';
    }

    return ns.tmpl(tree, null, module);
};
@chestozo
Copy link

Вроде бы ок.
Мне кажется только, что надо упомянуть:

  • настройки роутинга ns.router (общие слова) - что надо задать урлы, редиректы и реврайты
  • #app можно тоже переопределить
  • ns.page.title вызывается в какой момент? можно ведь там брать ns.page.current и там уже все параметры есть, не надо гонять урл через ns.router дважды.

Вообще, хорошо бы в конце примерный js файл может быть.

@doochik
Copy link

doochik commented Apr 19, 2014

  1. давайте для #app сделаем метод по аналогии с тем, что я в апдейтер добавил
  2. надо дописать про ns.updater.render

@chestozo
Copy link

1 - давайте )
2 - Мне кажется, updater - это отдельная глава должна быть: про дерево update-а и т.п.

@doochik
Copy link

doochik commented Apr 20, 2014

  1. Не, не хочется искать по докам все места, которые надо переопределить, чтобы заработал проект. Ведь раздел как раз про это

@edoroshenko
Copy link

Ещё стоит написать про ns.request.requestParams и ns.request.canProcessResponse

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment