Pull to refresh
27
0
Андрей Громоздов @AndyGrom

Senior frontend developr

Send message
Спасибо за статью, сходил на github и добавил MIT лицензию.
По крайней мере, после появления риббона в офисе я стал использовать в пять раз меньше функций, чем до него, потому что они были спрятаны где-то глубоко…
Как вариант:
Номер порта который прослушивает «серверная» часть необходимо сгенерировать динамически. Функцию startServer выполнить не в виде immediate-function, а обычной функцией с параметром (номер порта) и вызывать её из webkit`а. Если приложение работает в классическом варианте предусмотреть передачу номера порта через параметры командной строки.
я хотел промолчать… честно.
Статья на эту тему была бы уместна…
Это плохая практика. Мы теряем контекст при такой обработке. Можно использовать только в очень небольшом количестве сценариев.
Для express`а (connect) есть модуль connect-domain.
var connectDomain = require('connect-domain');
 ...
var app = express();
 ...
// Подключаем middleware
app.use(connectDomain());  
// Обработка исключений.
app.use(function(err, req, res, next) {
      logger.error(err);
      res.send(500, 'Houston, we have a problem!\n');
  });
Вероятно я Вас не правильно понимаю насчёт интернационализации, но разве это не оно? I18n and L10n in AngularJS
Все шаблоны должны быть в отдельных файлах. Не хочу даже обсуждать это. Откуда-то с Хабра: (с) Мы пишем код для людей, а не машин.

По поводу требования о загрузке шаблонов. Оно разумно и мне вполне понятно. Смею предложить следующий алгоритм:
1. При сборке проекта все файлы шаблонов объединяются в один (и минимизируются для оптимизации).
2. Файл с шаблонами загружается в главном контроллёре, скажем так:
<body ng-controller="mainController">
    ...
</body>


Контроллёр загружает файл с шаблонами, парсит его (разбивает на составные части) и «накачивает» ими Ангуляровский $templateCache, который использует директива ng-include (необходимо только выяснить в коде ангуляра, код кэша).

Таким образом и код будет выглядеть стандартно и подгрузки шаблонов не будет.
Жесть. Надеюсь, что эта куча говно-кода этот пример является просто примером:
1. Необходимо всю разметку перенести в отдельный файл-шаблон и заменить опцию template на templateUrl.
2. Удалить функцию getProviderButtonTemplate и воспользоваться директивой ангуляра ng-repeat
3. Убрать inline-стили. Но это так — общий совет.

Получится что-то вроде такого:
код:
angular.module('sipSsoLogin.directive', [ 'sipCommonI18n', 'sipSsoLogin.controller' ]).directive('sipSsoLogin', function () {
    return {
        restrict: 'E',
        templateUrl: 'loginPanel.html',
        replace: true
    };
});


loginPanel.html
<div ng-controller="sipSsoLogin">
	<div class="sipSsoPanel_text" sip-common-i18n="sso.login.directive" />
	<div ng-repeat="prov in providers">
		<button id="{{prov.sipSsoProviderId" ng-click="onProviderSelected(prov)">
			<div ng-class="prov.sipSsoProvider"></div>
		</button>
	</div>
	<div class="sipSsoPanel_inputContainer">
		<button class="..." sip-common-i18n="sso.button.login"></button>
		<div class="..." class="sipSsoPanel_inputField">
			<span class="...">{{prefix}}</span>
			<div class="...">
				<input type="text" value="{{user}}">
			</div>
		</div>
	</div>
</div>


С этим уже намного приятнее работать и можно двигаться дальше:
4. Директива 'sipSsoLogin.directive' — не нужна вообще (у неё нет функционала кроме замены шаблона). Удалить её и перейти на директиву ng-include которая реализует подобный функционал.

<div ng-include="'loginPanel.html'"></div>

5.… у нас остаётся только разметка, в которой кстати я вижу кастомную интернациализацию. В Ангуляре есть собственные средства интернационализации. Необходимо ими воспользоваться и, подозреваю, что уйдёт ещё куча говно кода
Добавил прозрачную поддержку загруженных angular`ом модулей в штатном порядке. Теперь не нужно ничего указывать при конфигурировании. Все модули которые были загружены процедурой bootstrap автоматически учитываются загрузчиком.
Насчёт 4-го пункта — спасибо. Добавлю в вызов функции $loadOnDemandProvider.config функцию, которая будет вызываться при ошибках загрузки. Или подумаю, как это сделать иначе. А то на данный момент всё в $log пишется.
ведь чтобы ей стать «взрослой» библиотекой, нужно проделать еще немало работы
Что бы ей в конце-концов стать backbone.js надо действительно проделать немало работы
По крайней мере мне, так проще конфигурировать функционал приложения. На клиента передаётся меню, которое формируется в зависимости от роли пользователя приложения. Дальше уже работает отложенная загрузка, которая подтянет необходимый модуль как только его функционал будет востребован. Я это делаю следующим образом:
где-то в html
   <a href="#!/feature">cool feature</a>

код:
app.config(['$routeProvider', function ($routeProvider) {
    $routeProvider.
        when('/feature', { template:  '<div load-on-demand="\'feature\'"></div>' });
} ]);
app.config(['$loadOnDemandProvider', function ($loadOnDemandProvider) {
    var modules = [{
        name: 'feature',
        script: 'js/feature.js',
        template: 'template/feature.html'
    }];
    $loadOnDemandProvider.config(modules, []);
} ]);


На клиента не тянется ничего лишнего при старте — уже хорошо. Упрощается отладка — тоже неплохо. Применение находит в достаточно больших проектах, где весь функционал грузить при старте не только накладно, но и не за чем.
Хочу обратить внимание, что целью статьи было показать решение для отложенной загрузки для angularjs, а никак не единственно верный механизм для обеспечение безопасности приложения.
А что касается безопасности, то конечно глупо надеяться обеспечить безопасность только средствами клиента. Но как по мне, так я не хочу оставлять ключ под ковриком, даже если он от второй двери.
Это значит что данные предоставляемые модулем предназначены для определённой группы пользователей, и эти данные не должны попасть в другую группу. Простейший пример: директор-сотрудник. Наличие всех модулей на клиенте — это потенциальная бреш в безопасности.
У любой технологии есть свои плюсы и минусы. Всегда приходится искать какой-то компромисс. Для Вашего сценария (с нестабильной связью) возможно, что полная загрузка в начале имеет смысл. Но тем не менее это не повод для фундаментального ограничения в других сценариях. К тому же функцией конфигурации модуля предусмотрено указание модулей, которые были загружены при bootstrap`е. Таким образом при первоначальной загрузке можно указать некоторый «ядерный» функционал, который будет доступен сразу после загрузки приложения.
Смысл обозначен в начале статьи. Представьте, что у Вас приложение с сотней-другой модулей. Каждый модуль реализует функционал для одной из групп пользователей приложения. Может так получиться, что конкретному пользователю, из всей сотни модулей для работы необходим только десяток. Остальные 90 он просто не имеет право использовать.
1. Для хостинга node.js приложений существует модуль для IIS. Однако, об интегрированном отладчике как-то позабыли :(. Может имеет смысл интегрировать Вашу работу с IIS модулем?
2. Клиентскую часть web-приложений приходится отлаживать другим экземпляром Visual Studio. Возможно ли сделать это так же удобно, как и для ASP.NET приложений?
Надо было пригласить…
на эту раздачу

Согласно разработанному техническому заданию, производительность системы дает возможность подключения 25 миллионов пользователей. Это позволит обеспечить 60 тысяч одновременных просмотров изображения с 1 камеры. Запись видеоизображения и звука будет вестись непрерывно с момента открытия участка до завершения подсчета голосов и подписания соответствующих протоколов. Общая длительность видео, записанного в ходе одного дня голосования, превысит 260 млн минут, или более 500 лет.

Information

Rating
Does not participate
Location
Сочи, Краснодарский край, Россия
Works in
Date of birth
Registered
Activity