Поддержание URL-адресов API на стороне сервера в приложении Javascript

Я создаю модульное приложение javascript (RequireJS/Backbone) и ищу советы по передовым методам распространения URL-адресов на стороне сервера в приложение JS для использования в шаблонах на стороне клиента, запросах API и т. д.

Внедрить его в базовый шаблон, который запускает приложение Javascript? Запрос API специально для этого?

Хотелось бы услышать решения, которые использовали другие. Спасибо!


person Chris Fetherston    schedule 10.05.2013    source источник


Ответы (1)


Вы можете отобразить тег <script> в теге body, определить модуль и поместить туда свои URL-адреса любым удобным для вас способом.
После этого вы можете потребовать его внутри своих модулей (файлов .js).

HTML (например, макет вашего приложения):

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Inline RequireJS define</title>
    </head>
    <body>
        <h1 id="foo-holder"></h1>
        <a id="sign-up-link" href="#"></a>
        <script>
            // This is rendered by your server-side application:
            define('data/config', function(require, exports, module) {
                exports.Url = {
                    HOME: 'https://mysite.com',
                    SIGN_IN: 'https://mysite.com/sign-in',
                    SIGN_UP: 'https://mysite.com/sign-up',
                    LOG_OUT: 'https://mysite.com/log-out'
                };

                exports.foo = 'bar';
            });
        </script>
    </body>
</html>

JavaScript (где-то в вашем модуле):

// This is somewhere in your JavaScript module
require(['data/config'], function(Config) {
    $('#foo-holder').text(Config.foo);
    $('#sign-up-link')
        .text(Config.Url.SIGN_UP)
        .attr('href', Config.Url.SIGN_UP);
});

ДЕМО


Еще один трюк можно сделать с привязкой атрибутов.

В вашем макете:

<a data-url="HOME" href="#">Home</a>
<a data-url="SIGN_IN" href="#">Sign In</a>
<a data-url="SIGN_UP" href="#">Sign Up</a>
<a data-url="LOG_OUT" href="#">Log Out</a>
<script>
    // This is rendered by your server-side application:
    define('data/config', function(require, exports, module) {
        exports.Url = {
            HOME: 'https://mysite.com',
            SIGN_IN: 'https://mysite.com/sign-in',
            SIGN_UP: 'https://mysite.com/sign-up',
            LOG_OUT: 'https://mysite.com/log-out'
        };

        exports.foo = 'bar';
    });
</script>

В вашем файле JavaScript:

// This is somewhere in your JavaScript module
require(['data/config'], function(Config) {
    $('a[data-url]').each(function() {
        var $a,
            urlConstant,
            url;
        $a = $(this);
        urlConstant = $a.data('url');
        url = Config.Url[urlConstant];
        if(url) {
            $a.attr('href', url);
        }
    });
});

ДЕМО

person Eugene Naydenov    schedule 11.05.2013
comment
Отлично, это очень близко к направлению, которое я собираюсь использовать. Просто вместо того, чтобы позже менять URL-адреса с помощью jQuery, я передам содержимое модуля URL-адреса в библиотеку шаблонов на стороне клиента, которую я использую. Так что URL-адреса будут доступны как {{Config.url.SIGN_IN}} или что-то подобное в моих шаблонах. - person Chris Fetherston; 12.05.2013
comment
Конечно, вы можете передать конфиг в шаблон и использовать его константы внутри него. - person Eugene Naydenov; 12.05.2013