Цитата:
правда я нашел русскую еще утром |
Чтоб приоритетнее 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 ветку, которую скоро выгружу) оцените ридми=) |
Цитата:
|
Оценил.
Особенно понравилось. Цитата:
Цитата:
Цитата:
Цитата:
Не одного комментария в коде нету. Настоящий мужик ! Комментарии для слабаков. |
Цитата:
|
Пасоны, глядите я новый Class написал =)
Пасоны, глядите я новый Class написал =)
function Class( description ) { return Class.extend( description ); } Class.extend = function( description ) { description.prototype = this.prototype; var prototype = new description; var constructor = prototype.constructor || function() {}; constructor.prototype = prototype; constructor.extend = this.extend; return constructor; }; // используем var Animal = new Class(function() { this.say = function() { alert( this.name ) } }); var Cat = Animal.extend(function() { this.constructor = function() { this.name = 'Cat'; } }) var Rabbit = Animal.extend(function() { this.constructor = function() { this.name = 'Rabbit'; } }) var q = new Cat(); var w = new Rabbit(); q.say(); // Cat w.say(); // Rabbit щас добавлю сахар для перекрытия и обращения к полям без this Чтобы можно было писать так var Animal = new Class( function() { constructor = function() { name = 'Animal' age = 11 } say = function() { alert( name ) } } ); и имелось ввиду именно обращение к this А добавлю перекрытие чтобы к перекрытым родительским можно было обращаться как parent.method |
Явно здесь не был
http://www.typescriptlang.org/Playground/ |
Poznakomlus, да да, но это препроцессор а у меня подключаешь один файлик и все работает.
|
хм. Да, если кто нас читает то я оговорился) это транслятор.
Poznakomlus, послушай, я знаю про тайпскрипт. |
Чо-то мне кажется это слишком медленно, так что завязываю и снова возвращаюсь к UI.js
function Class( description ) { return Class.extend( description ); } Class.extend = function( description ) { description = parse( description ); description.prototype = this.prototype; var prototype = new description; if (prototype.hasOwnProperty( 'constructor' )) { var constructor = prototype.constructor } else { var constructor = function() {} } constructor.prototype = prototype; constructor.prototype.parent = description.prototype; constructor.extend = this.extend; return constructor; }; function parse( description ) { var code = description.toString().match( /\{([\s\S]*)\}/ )[1]; var regExp = /parent[\s]*\.[\s]*(\w+)[\s]*\((.*?)\)/img; code = code.replace( regExp, function( match, method, params ) { var callText = /\S/.test( params ) ? '.call(this,' : '.call(this'; return 'parent.' + method + callText + params + ')'; } ); code = 'with(this){' + code + '}'; return new Function( code ); } // ИСПОЛЬЗУЕМ Animal = Class.extend( function() { this.say = function() { alert( 'animal' ) } } ); Cat = Animal.extend( function() { this.say = function() { parent.say(); alert( 'cat' ); } } ) new Cat().say(); |
function parse( description ) { var code = description.toString().match( /\{([\s\S]*)\}/ )[1]; var regExp = /parent[\s]*\.[\s]*(\w+)[\s]*\((.*?)\)/img; code = code.replace( regExp, function( match, method, params ) { var callText = /\S/.test( params ) ? '.call(this,' : '.call(this'; return 'parent.' + method + callText + params + ')'; } ); code = 'with(this){' + code + '}'; return new Function( code ); } :D |
melky, чит =)
|
пофиксил, ускорил скорость работы) добавил поддержку статических, приватных и даже публичных свойств =)
function Class( description ) { return Class.extend( description ); } Class.prototype['constructor'] = function() {}; Class['extend'] = function( description ) { description = parse( description ); description.prototype = this.prototype; var prototype = new description( description.prototype, constructor ); var _constructor = prototype['constructor']; function constructor() { return _constructor.apply( this, arguments ); } constructor.prototype = prototype; constructor['extend'] = this['extend']; return constructor; }; function parse( description ) { var code = description.toString().match( /\{([\s\S]*)\}$/ )[1]; code = parentSupport( code ); code = privateSupport( code ); code = publicSupport( code ); return new Function( 'parent,static', code ); } function parentSupport( code ) { var regExp = /\bparent\b\s*\.\s*(\w+)\s*\((.*?)\)/img; code = code.replace( regExp, function( match, method, params ) { var separator = /\S/.test( params ) ? ',' : ''; return 'parent.' + method + '.call(this' + separator + params + ')'; } ); return code; } function privateSupport( code ) { var fix = '___'; var regExp = /\bprivate\b.([\w_]+)/img; code = code.replace( regExp, function( match, prop ) { return 'this.' + fix + prop + fix; } ); return code; } function publicSupport( code ) { var regExp = /\bpublic\b.([\w_]+)/img; code = code.replace( regExp, function( match, prop ) { return 'this.' + prop; } ); return code; } //######################################################## static var Cat = new Class( function() { this.constructor = function() { static.cnt++ } static.cnt = 0 } ) new Cat(); new Cat(); new Cat(); alert( Cat.cnt ) // 3 //######################################################## private var Cat = new Class( function() { public.name = 'Cat' private.age = 11; } ); var q = new Cat(); alert( q.name ); // Cat alert( q.age ); // undefined |
если кто не понял, это все шутка :yes: потому как пилить норм парсер мне влом) мне ни разу не встречалась необходимость в наслеовании классов если честно за всю жизнь. Ну ни разу вот, например ни разу не приходилось наследовать что-то от евент эмиттера, я все делаю проще просто. Если появляется необходимость в наследовании, значит - сделал сложно, и я переделываю.
|
жалко правда эти васяны не разрешают использовать слово super. вообще вымораживает, могли бы и варнинг бросать.
|
Цитата:
|
Ты про абстрактные классы или чо)?
|
Дайте мне движение сделать!
И всем типа похуй что причина соперничества людей - дефицит благ, таких например как возможность не работать а результат работы получать, и этот дефицит устраняется автоматизацией скучных и рутиных работ на которых люди не хотят работать, ливтеров заменили автоматическими лифтами, ткачих заменили ткатскими станками, гаишников и водителей заменят автопилотами, а быдло лишь возится в своих социальный проблемах не видя всей картины в целом. ВСЕ НАШИ ПРОБЛЕМЫ ТЕХНИЧЕСКИЕ, А НЕ ПОЛИТИЧЕСКИЕ! То есть сам факт СОПЕРНИЧЕСТВА ЛЮДЕЙ УЖЕ есть факт проблемы. И проблема явно не в том как более эффективно соперничать с другими людьми. А проблема в дефиците благ. Вы же, делаете революции хуюции и прочее, совершенно не видя причин. Вы же тупо соперничаете, даже не пытаясь устранить причину соперничества, относясь к соперничеству и дефициту благ, как к чему-то незыблимому.
Люди делятся на группировки называемые странами, на племена, соперничают за ресурсы, и прочее.. И только горстка ученых развивает технологии чтобы устранить этот дефицит и действительно РЕШИТЬ ПРОБЛЕМЫ. НО МЫ ТО С ВАМИ НЕ ТАКИЕ!!! МЫ БУДЕМ ПИЗДИЦА ДРУГ С ДРУГОМ ЗА БАНАНЫ ЗА МЕСТО ТОГО ЧТОБЫ УВЕЛИЧИТЬ УРАЖАЙНОСТЬ! И КУКАРЕКАТЬ "ВОТ ПЛОХОЙ ЧЕЛОВЕК! БОЛЬШЕ БАНАНОВ ЧЕМ Я ЗАБРАЛ!!! РЕВОЛЮЦИЯ!!!" ! Вы наверное еще и думаете что МЕНТЫ ПЛОХИЕ раз НЕ СДЕРЖИВАЮТ ЖАДНОСТЬ ВОЗНИКАЮЩУЮ В УСЛОВИЯХ ДЕФИЦИТА... Игнорируя тот факт что проблема все таки в дефиците, а не в сдерживании жадности. СТР0ОNЕ Р0БОТОВ8 б9ЛТtь!1! ![]() |
человек = животное, замени слово человек в своем тексте на животное и ты поймешь абсурдность своих суждений
|
человек - животное, абсурдности в суждениях не заметил. что я делаю не так?
|
Цитата:
|
:yes:
|
у тебя есть интернет, но нет еды? скачай
|
Maxmaxmaximus7, разрешаю начать строительство роботов. Можешь начать с робота "функция Class".
|
Maxmaxmaximus7,
Что делать в случае зависти? У Маши 2 робота новой модели, а у Даши 1 старой. Даша ненавидит Машу! Сомневаюсь, что на планете хватит ресурсов, чтобы обеспечить всех желающих новыми роботами одновременно. Будут драки за роботов, хвастовство новым роботом Mexus 99 ... |
Цитата:
а во вторых зависти на материальные блага уж точно не будет, так как они не буду в дефиците. 1) ты не знаешь сколько на планете ресурсов и какая носимая мощность земли (сколько она в состоянии выдержить население людей в комфорте) 2) останется единственная проблемА, это типа нечайно толкнул девочку а она упала глазом на карандаш и ослепла, и ейё отец захотел тебе смтить. или измены например. правда мне кажется что люди в том обществе все таки разработают такие технологии которые обманут смерть, смогут сделать протезы глаз.. ок. но вот что делать с изменами? мне кажется либо моногамия исчезнет либо.. я хуйц знат, но в любом случае то общество будет горааазло лучше нашего. роботы не решают ВСЕХ проблем человечества) но блять 99 из них они уж точно решают. 3) собирать из энергии атом за атомом любую структуру, как в 3д печати, будь то апельсин, медикаменты или схема для нового робота. сообирать это все в специальном устройстве напоминающим микроволновку которое будет у каждого дома. я одумаю это тоже не за горами. дефицтра ресурсов нет, так как наш главный ресурс это энергия. 4) Так же большенство вещей на которые мы тратим ресурсы по сути тоже нен ужны, например мы рисуем картинку и делаем для неё рамку из дерева, все это физический обьект, состоящий из краски дерева и холста. Но по сути мы лишь хотим получить определеную стимуляцию определенных нейронов чтобы получить изображение картины. мне кажется в будущем многие такие вещи мы будем делать напрямую в мозг, не тратя ресурсы на физические обьекты. |
чукча не читатель, чукча писатель
|
Maxmaxmaximus7, болтовня ничего не стоит, покажи мне робота, которого ты построил
|
чукча с просони)
Цитата:
|
Цитата:
Ну на "роботов", коли ты их так называешь https://github.com/kobezzza ЗЫ: ты же говорил что у тебя 9-ти летняя девушка, чем не личная жизнь? |
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 12:31. |