powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / использование "пространства имен" в jQuery
13 сообщений из 13, страница 1 из 1
использование "пространства имен" в jQuery
    #38100857
scymaks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(сразу извиняюсь, за возможно неправильную терминологию, но надеюсь, что вопрос мой понятен будет)
У меня есть набор AJAX методов, которые выступают API.

Грубо говоря методы такие (url):
Код: sql
1.
2.
3.
4.
5.
/api/GetProducts
/api/GetCatalogs
/api/AddComment
/api/SaveState
...



вместо
Код: sql
1.
$.get('/api/GetProducts', params, function(response) {...});


и
Код: sql
1.
$.post('/api/AddComment', params, function(response) {...});



хочется как-то более унифицированно обращаться к API:
Код: sql
1.
2.
$.api.getProducts(params, function(response) {...});
$.api.addComment(params, function(response) {...});


нормально ли будет такой подход и какие недостатки?
...
Рейтинг: 0 / 0
использование "пространства имен" в jQuery
    #38100863
Фотография iConst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scymaks,

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

Например, в АСП.Нет подобное реализовано: семейство функций по именам методов генерятся автоматически:
Namespace.MethodName([param1, param2, ...,] callback);

Если удобно - пуркуа бы не па? Непонятно только зачем это пристегивать к jQuery...
...
Рейтинг: 0 / 0
использование "пространства имен" в jQuery
    #38100910
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
использование "пространства имен" в jQuery
    #38100912
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только действительно непонятноiConstзачем это пристегивать к jQuery...
...
Рейтинг: 0 / 0
использование "пространства имен" в jQuery
    #38100918
scymaks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iConst,

То есть можно делать вот так:


Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
(function($) {
   window.API = new function() {
      return {
         getProducts: function(params, onSuccess) {
            $.get('/api/GetProducts', params, function(response) {
               if ($.isFunction(onSuccess)) { onSuccess(response); }
            });
         },
         addComment: function(params, onSuccess) {
            $.get('/api/GetProducts', params, function(response) {
               if ($.isFunction(onSuccess)) { onSuccess(response); }
            });
         }
      };
   };
})(jQuery);



а потом

Код: javascript
1.
2.
3.
   API.getProducts({category: 'common'}, function(response) {
      /* ... что-нибудь делаем ... */
   });



так? Это нормальный подход?
...
Рейтинг: 0 / 0
использование "пространства имен" в jQuery
    #38100931
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scymaks, это классический подход организации пространства имён в JavaScript.
Только зачем Вы response на верхний уровень пробрасываете?
...
Рейтинг: 0 / 0
использование "пространства имен" в jQuery
    #38100990
Фотография iConst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scymaksiConst,

То есть можно делать вот так:


Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
(function($) {
   window.API = new function() {
      return {
         getProducts: function(params, onSuccess) {
            $.get('/api/GetProducts', params, function(response) {
               if ($.isFunction(onSuccess)) { onSuccess(response); }
            });
         },
         addComment: function(params, onSuccess) {
            $.get('/api/GetProducts', params, function(response) {
               if ($.isFunction(onSuccess)) { onSuccess(response); }
            });
         }
      };
   };
})(jQuery);



а потом

Код: javascript
1.
2.
3.
   API.getProducts({category: 'common'}, function(response) {
      /* ... что-нибудь делаем ... */
   });



так? Это нормальный подход?Модульность - нормальный подход. В принципе - бест прексис.
Но в данном примере (опять же - неизвестен контекст):
1. проброс jQuery совершенно бессмысленен - он глобален.
2. оборачивание в замыкание - не нужно: API тоже глобальный объект
В этом ключе уместней было бы что-то вроде:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
var API = (function(a) {

function setApi(meth, obj)
{
   obj[name] = function(params, onSuccess) 
   {
       $.get('/api/' + meth, params, function(response) 
       {
           if ($.isFunction(onSuccess)) onSuccess(response); 
       }
    }
}

   setApi('GetProducts', a);
   setApi('AddComment', a);

  return a;

})(API || {});

Но все равно - это переделка вашего кода на лету. И не факт, что правильно.

Если код пишется вручную - одно, если это генерится сервером - другое.
Если работаем исключительно внутри модуля - можно не возвращать объект API.
...
Рейтинг: 0 / 0
использование "пространства имен" в jQuery
    #38101000
Фотография iConst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поправка
Код: javascript
1.
obj[meth] = function(params, onSuccess) ...
...
Рейтинг: 0 / 0
использование "пространства имен" в jQuery
    #38104428
scymaks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iConst,

что-то у меня не получается так сделать...

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
var a = {};

a['b'] = function() { return 1; }

console.log(a.b()); // 1

a['c'] = function() { return 'h'; }

console.log(a.c()); // "h"

var m = {f:12, g:34};

for (var i in m) {
    if (m.hasOwnProperty(i)) {
        a[i] = function() {
            return m[i];
        };
    }
}

console.log(a.f()); // 34
console.log(a.g()); // 34
console.log(a.f == a.g); // false



почему a.f и a.g выполняют один и тот же код?
...
Рейтинг: 0 / 0
использование "пространства имен" в jQuery
    #38104455
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scymaks, потому что на момент вызова i - это g. Изучите замыкания. Начните отсюда .
...
Рейтинг: 0 / 0
использование "пространства имен" в jQuery
    #38104785
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scymaksхочется как-то более унифицированно обращаться к API:
Код: sql
1.
2.
$.api.getProducts(params, function(response) {...});
$.api.addComment(params, function(response) {...});

нормально ли будет такой подход и какие недостатки?
Такой способ называется RFC/RPC - Remote Function/Procedure Call - и часто используется на практике. Все флексовские фреймворки используют такой подход для дерганий методов на сервере. Для javascript я использовал DWR - это фреймворк как раз для этого используется, правда, он заточен исключительно для Java на сервере. Думаю, для других языков аналогичные продукты тоже должны быть.

Немного крутил его, реализация не такая примитивная - там гибкость достигается за счет того, что на сервере определяются методы, которые можно "дергать" с клиента (в т.ч. аннотациями) и при компиляции и запуске проекта создается бин, где собран весь референс на методы. А когда клиент обращается за требуемыми js-файлами, сервер динамически их отдает. Таким образом, на клиенте нет жесткой привязки к конкретным прописанным методам - это делает проект крайне гибким. Но сам js-функционал статичен, все делает сервер. Библиотека достаточно большая, там много всякого сопутствующего, в том числе server push на long polling, но проект зарекомендовал себя неплохо - пожалуй, самое популярное решение в данной области.

Что мне импонирует еще в нем, так это еще одно удобство: к примеру, имеем форму на странице; при корректном вводе страница или перегрузится, или загрузится новая, но вот валидацию часто делают через ajax - юзабилити выше. Однако при таком подходе (если ничего не предпринимать) данные в строках ввода не сохраняются для дальнейшего браузер-suggestion, в том числе хранение данных форм, что напрягает. Если нужна динамическая валидация и автозаполнение форм, то приходится задействовать схему взаимодействия не через ajax, а через target формы в лице iframe (можно и динамического) - это на корню убивает всю прелесть использования ajax за его неприменимостью. А вот используя DWR, удается еще и рыбку съесть - форма отправлена путем вызова референсного серверного метода, возвращен ответ сервера, можно задействовать кучу хандлеров и автозаполнение форм работает. Можно, конечно, и самому ... но из коробки приятнее.
...
Рейтинг: 0 / 0
использование "пространства имен" в jQuery
    #38105489
scymaks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruck,

У нас как раз сервер на Java (Tomcat). Но сейчас проект уже в стадии завершения, в будущем проекте обязательно попробую этот framework!
...
Рейтинг: 0 / 0
использование "пространства имен" в jQuery
    #38105518
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О! Тогда это именно оно. Запуск за 3 минуты, море примеров на родном сайте, адаптация под любой серверный фреймворк (я к спрингу его цеплял), аннотационное декларирование. Правда, на клиенте у них только или нативное использование, или под DOJO. Но в отсутствии зависимостей от другого продукта есть свои плюсы.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / использование "пространства имен" в jQuery
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]