Цитата:
правда я нашел русскую еще утром |
Чтоб приоритетнее ng-controller или ng-repeat ?
|
Способ организации модулей
Как вы организуете модули в своих проектах? В ангуляре я увидел это, вроде идея то простая, но оч удобная. Всегда теперь буду использовать эту штуку:
module = new function() { var modules = {}; function getParamNames(func) { return func.toString().match(/\((.*?)\)/)[1].match(/[\w$]+/g) || []; } function invoke(factory) { var injections = getParamNames(factory).map(function(name) { return module(name); }); return factory.apply(null, injections); } return function(name, factory) { if (!factory) { var module = modules[name]; if (!module) throw 'модуль ' + name + ' не найден'; return module.instance || (module.instance = invoke(module.factory)); } modules[name] = { factory : factory, instance: null }; return this; } }; module('one', function() { function say() { console.log('im one!') } return {say: say}; //импорт }); module('two', function() { function say() { console.log('im two!') } return {say: say}; //импорт }); module('three', function(two, one) { function init() { one.say(); two.say(); console.log('im three, and i init!') } return {init: init}; //импорт }); module('three').init(); //запускаем шайтанмашину =) Кто не понял, модули зависимости мы запрашиваем по именам аргументов. |
Не использую специальный каркас для модулей, разве что для служебных глобальных переменных юзаю анонимную вызываемую функцию. А так простые неймспейсы и ничего более, не использую AMD (т.к. это выглядит мило только при малом количество кода, один раз обжёгся), мне ближе CommonJS подход (его и юзаю), да и в скорем времени можно ожидать модули, как часть нового стандарта, так что можно юзать уже с транслятором.
|
Кстати да, много нового нативного добавляют, радует что этими вещами занимаются люди которые живут реальностью = ) а не в абстрактной мирке.
|
<script src="http://mychamber.ru/build/ui.js"></script> <div controller="FRP"> <button click="a++">add</button> {a} + {b} = {c} </div> <script> function FRP() { a = 2 b = 3 c = (a + b) } </script> круто? |
Пасоны, придумал очередную нанотехнологию, сервисы могут возвращать значение АСИНХРОННО!!
<script src="http://mychamber.ru/build/ui.js"></script> <div controller="Ctrl"> {prop} </div> <script> function Ctrl() { prop = $test() //немного уличной магии ^__^ } ui.global.service('$test', function() { return function test() { //возвращаем значение ассинхронно setTimeout(function() { test.$async('Тадааа ^__^') }, 2000) return 'loading...'; } }); </script> Единственное что, значение ассинхронно можно пихнуть только если идет приравнивание, а не декларация обьекта или вызов функции =( но я работаю над этим. Но по сути, если мы используем FRP подход, то это неебический сахар, ведь там только приравнивание и идет. ![]() Ну типа того: <script src="http://mychamber.ru/build/ui.js"></script> <div controller="Ctrl"> Имя: {form.name}<br> Пароль: {form.pass}<br> Отложенное значение: {form.test} </div> <script> function Ctrl($test) { name = 'Maxmaxmaximus' pass = '****' test = $test() form = ({ name: name, pass: pass, test: test }) } ui.global.service('$test', function() { return function test() { //возвращаем значение ассинхронно setTimeout(function() { test['$async']('Тадааа ^__^') }, 2000) return 'loading...'; } }); </script> |
Еще одна фитча, если мы вызываем контроллер так, то "глобальные переменные" попадают в текущий scope,
![]() Если же мы вызываем контроллер как инстанс, то все эти свойства попадают в него. ![]() То есть так и рекомендуется описывать контроллеры, без всяких this'ов и $scope'ов. 1) Это во первых удобно, так как не нужно писать всякие this и $scope. 2) Во вторых красиво, так как идешки подсвечивают "глобальные" переменные если настроить. 3) В третьих, человек вызывающий контроллер будет сам решать куда ему засунуть свойства контроллера, в инстанс или развернуть же в текущий скоуп =) 4) Так же, к слову, у нас внутри контроллеров есть прямой доступ к внешней области видимости, но если кто хочет может обратится явно через сервис: $scope.dsffsd Это вам не ангуляр детки. |
Короче если так controller="ToDo", то зисом будет скоуп, а если так controller="ToDo as todo" то зисом будет новая сущность, но скоуп все ровно будет виден внутри контроллера.
просто this.qq можно не писать так как код предварительно парсится и это все дописывается автоматически если нет локальной переменной с таким именем конечно же. все гениальное просто. |
Релиз ui 1.0.0
https://github.com/Maxmaxmaximus/ui
Половину функционала выпилил в dev ветку, которую скоро выгружу) оцените ридми=) |
Часовой пояс GMT +3, время: 10:36. |