Функции Javascript - PullRequest
       14

Функции Javascript

1 голос
/ 26 июня 2009

Мы пытаемся сделать доступными только определенные функции для запуска в зависимости от того, какой адрес запроса.

Мне было интересно, как мы могли бы сделать это:

if(condition1) 
{
    $(document).ready(function() {
        ...
        ... 
        // condition1's function
    });
}
else if(condition2) 
{
    $(document).ready(function() {
        ...
        ... 
        // condition2's function
    });
else if...

Мне было интересно, какой хороший шаблон подойдет для этого? так как у нас есть все наши функции в одном файле.

Ответы [ 8 ]

4 голосов
/ 26 июня 2009

Зависит от того, на что похожи ваши условия ...

Если все они имеют одинаковый формат, вы могли бы сделать что-то вроде

array = [
    ["page1", page1func],
    ["page2", page2func],
    ...
]

for(i=0; i<array.length; ++i)
{
    item = array[i];
    if(pageName == item[0]) $(document).ready(item[1]);
}
3 голосов
/ 26 июня 2009

Мне нравится Ответ Ника лучше всего, но я мог бы использовать подход хеш-таблицы, предполагая, что 'адрес запроса' является известным фиксированным значением:

var request_addresses = {
    'request_address_1': requestAddress1Func,
    'request_address_2': requestAddress2Func
};

$(document).ready(request_addresses[the_request_address]);

Конечно, request_addresses тоже может выглядеть так:

var request_addresses = {
    'request_address_1': function () {
        /* $(document).ready() tasks for request_address_1 */
    },
    'request_address_2': function () {
        /* $(document).ready() tasks for request_address_2 */
    }
};
1 голос
/ 26 июня 2009

Возможно, было бы лучше выполнить проверку URL-адреса сайта на сервере (если можно?) И включить различные файлы .js в зависимости от состояния, например,

** Использование ASP.NET MVC

<html>
<head>
  <%
  if(Request.Url.Host == "domain.com")
  { %><script type="text/javascript" src="/somejsfile1.js"></script><% }
  else
  { %><script type="text/javascript" src="/somejsfile2.js"></script><% }
  %>
</head>
</html>

Таким образом, каждый файл js будет автономным, и ваш HTML не будет содержать строки JS, в которых он не нуждается (т. Е. Код, предназначенный для "других" сайтов)

1 голос
/ 26 июня 2009

Я не вижу никаких проблем с этим. Но это может быть лучше:

$(document).ready(function() {
    if (condition1) 
       // condition1's function
    else if (condition2)
       // condition2's function
    ...
});
0 голосов
/ 26 июня 2009

Я не могу придумать, какой изящный способ добиться этого, используя только JavaScript. Если это все, что вам доступно, то я бы по крайней мере рекомендовал вам использовать оператор switch или (предпочтительно) реализацию хеш-таблицы для ссылки на ваши функции.

Если бы мне пришлось сделать что-то подобное, учитывая, что моя среда разработки полностью находится под моим контролем, я бы разбил JavaScript на отдельные файлы, а затем, определив запрос, использовал бы код на стороне сервера для создания пользовательского кода. в комплекте файл JavaScript и служить этому. Вы можете создавать кэш-копии этих файлов на сервере и отправлять заголовки кэширования на стороне клиента.

Эта статья , которая охватывает эту технику как часть серии, может быть вам интересна.

0 голосов
/ 26 июня 2009

Вместо того, чтобы делать то, что вы планируете, рассмотрите возможность группировки функций некоторым логическим способом и пространство имен групп.

У вас будет объект, который содержит объекты, которые содержат функции, и вызовите так:

serial = myApp.common.getSerialNumber(year,month);
model = myApp.common.getModelNumber(year);

или

myApp.effects.blinkText(textId);

Если вы хотите скрыть функцию или функции на странице, я полагаю, вы могли бы обнулить их по функции или группе после загрузки. Но, надеюсь, организованные вещи удовлетворят ваше желание очистить глобальное пространство имен.

0 голосов
/ 26 июня 2009

Я бы просто оставил все функции в одном файле, если они уже есть. Это сэкономит ваше время на доработку и сэкономит время пользователя с уменьшенными затратами времени и кэшированием в браузере. Только не позволяйте этому файлу становиться слишком большим. Отладка и модификация станут ужасными.

Если вы храните их все в одном файле, добавьте сценарий на каждой странице, который вызывает те, которые вам нужны.

function funcForPage1() {...}

function funcForPage2() {...}

Тогда на стр. 1

$(funcForPage1);

и т.д.

0 голосов
/ 26 июня 2009

Может быть, вы могли бы дать более подробную информацию о том, что именно вы делаете, но из того, что я могу сказать, почему бы вам просто не создать другой файл JS, содержащий необходимые функции для каждой страницы, вместо того, чтобы пытаться сбросить все их в один файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...