Что можно почитать на тему javascript MVC, MVVM ... ?
|
Цитата:
|
Ребят, посоветуйте какой-нибудь самый-самый фреймворк(и?) для создания клиентсайда? Очень важно, чтобы он удовлетворял следующим условиям:
- поддержка ES6 - сравнительно быстрая разработка(UI/логики) - активное сообщество Слышал про Ангуляр 2, но он ещё не релизнулся, на сколько я знаю. З.Ы. стало мало Реакта, решил расширить знания) |
|
Safort, давно хочу попробовать, но руки не доходят http://javascript.ru/forum/offtopic/...tml#post369258 :)
|
Gozar,
нее, хочется чего-то совсем далёкого от реакта. Просто ради разнообразия) nerv_, ок, ушёл туда. |
Safort, я вообще-то почти прямую ссылку дал)
|
Лол, должность "инженер HTML" http://www.pracuj.pl/praca/inzynier-...oferta,3919582
Цитата:
|
Array::contains()
Тестирую функцию Array.prototype.contains2() с двунаправленным поиском, что теоретически должно увеличить вероятность/скорость поиска на всем пространстве значений.
Кому не лениво, запустите и напишите результаты сюда. Код и мои результаты ниже. Также принимаются замечания :) /** * @param {*} any * @returns {Boolean} */ // TODO не находит NaN Array.prototype.contains1 = function(any) { return this.indexOf(any) !== -1; }; /** * @param {*} any * @returns {Boolean} */ // TODO не находит NaN Array.prototype.contains2 = function(any) { var array = this; var l = array.length; if (l === 0) return false; for(var i = 0, j = l - 1; i <= j; i++, j--) { if (array[i] === any) return true; if (array[j] === any) return true; } return false; }; // ------------------------------------- var NEEDLE = {}; var DATA = createDataSet(); console.log('data set was created'); //console.log(DATA); test(function(array) { array.contains1(NEEDLE); }, 'contains1'); test(function(array) { array.contains2(NEEDLE); }, 'contains2'); function test(cb, msg) { var startTimeStamp = Date.now(); console.log('start::' + msg); for(var i = 0, a = DATA, l = a.length; i < l; i++) { cb(a[i]); } var endTimeStamp = Date.now(); console.log(endTimeStamp - startTimeStamp, msg); console.log('end::' + msg); } function createDataSet() { var EXPONENT = 6; // 1 var data = []; for(var i = 0; i < 10; i++) { var array = range(0, Math.pow(10, EXPONENT)); var needleIndex = Math.pow(10, EXPONENT - 1) * i; array[needleIndex] = NEEDLE; data.push(array); } data.push(range(0 ,Math.pow(10, EXPONENT))); return data; // ---------------------- function range(from_, to_) { for(var a = [], j = from_; j < to_; j++) { a[j] = j; } return a; } } Windows7 x64 Chrome (last) 115 "contains1" 80 "contains2" Firefox (last) 23 "contains1" 27 "contains2" IE 10 139contains1 90contains2 |
nerv_,
Windows8.1 x64 Chrome (last) 58 "contains1" 60 "contains2" Firefox (last) 8 contains1 10 contains2 IE 11 114 contains1 530 contains2 |
nerv_,
ubuntu 14. FF 38 Цитата:
Цитата:
|
Kubuntu 15.04,
Chromium 41.0.2272.76 (64-bit) Цитата:
|
Safort, хера у тебя разница между хромом и лисой.
Надо в своей лисе запустить. UPD: Цитата:
|
Чет туплю
function foo () {}; foo.prototype.ext = { n: function () { // как тут получить после инициализации объект foo } } |
Я вот тут не пойму насче ангуляра, у меня есть список элементов, мне нужно установить одному из них класс, т.е мне нужно получить ul и работать через children
<div ng-controller="GameController" class="game"> <ul class="game-flex" > <li class="game-field" ng-repeat="count in arr track by $index" > {{$index+1}} </li> </ul> ... На сколько я понял, если я правильно понял смысле патерна MVC то я должен работать с view через модель, т.е что то типо document.querySelector( ".game-flex") нельзя замутить, отсюда вопрос, как установить ul > li нужный мне класс |
<ul class="game-flex" > <li class="game-field" ng-class="{someClass: arr[$index].isClass}" ng-repeat="count in arr track by $index" > {{$index+1}} </li> </ul> Не? |
trikadin, там получается фишка в том, что класс будет устанавливатся в зависимости от внешнего события, т.е сначала все генерится, а потом например пришел ответ севера и нужно установить класс одному из элементов списка
|
Цитата:
--- trikadin, я тут "всем" рекомендую Vue.js, но поскольку они не юзали плотно ангуляр не понимают что это такое и с чем едят :) Будет время, интерес, посмотри. Как по мне: нет минусов ангуляра (того же $rootScope.$apply()), но есть его преимущества, и не только его. |
nerv_, trikadin, а англуляр не будет перерысовывать весь список, только добавит класс?
|
Цитата:
По мне так самый серьезный недостаток всех существующих библиотек в том, что они не используют es6, а так же у них "жуткая" документация. Причем почти у всех. И чем старше фреймворк и чем больше версий, тем страшнее дока. Первые грабли ударили меня в Ангуляре, Вторые в Ембер, про круговерть голого React я даже боюсь заикаться, там первые 2 месяца можно только тыкаться между граблями. Даже в jquery дока уже похожа на Ленинские заметки на полях Капитала. Причем многие идеи очень достойные. Взять тот же Ember. Его соглашения натолкнули меня на мысль и я создал буквально за 3 часа ф-к на коленке с просто потрясающей скоростью разработки и удобства. (отступление, спасибо Кобезе за шаблонизатор, очень в тему лег). Смысл в том, что шаблон называется также как и контроллер, также как и обработчик. А событие просто пробрасываем из шаблона через контроллер(тут вдруг чего ещё надо будет сделать) в обработчик. А чтобы вся эта котовасия работала, мы при рендеринге шаблона говорим модели(автоматом конечно), кто отвечает сейчас за события. И всё это чудо уместилось в жалкие 8кб. и это уже вместе с управлением целого раздела! ХЗ, может в ангуляре тоже много интересного, нужно будет почитать :) |
Цитата:
|
Как записать компактней, но чтобы читаемость кода сохранилась? :)
/** * @returns {Array.<Node>} * @private */ __getChildren() { var matrix = this[__MATRIX]; var {width, height} = matrix.getSizes(); var vector = matrix.findCellVector(cell => !isNumber(cell)); var children = []; if (vector[0] !== 0) { let matrixClone = Matrix.clone(); let vectorClone = vector.clone(); vectorClone[0] -= 1; matrixClone.swapCells(vector, vectorClone); children.push(new Node({matrix: matrixClone})); } if (vector[0] !== width - 1) { let matrixClone = Matrix.clone(); let vectorClone = vector.clone(); vectorClone[0] += 1; matrixClone.swapCells(vector, vectorClone); children.push(new Node({matrix: matrixClone})); } if (vector[1] !== 0) { let matrixClone = Matrix.clone(); let vectorClone = vector.clone(); vectorClone[1] -= 1; matrixClone.swapCells(vector, vectorClone); children.push(new Node({matrix: matrixClone})); } if (vector[1] !== height - 1) { let matrixClone = Matrix.clone(); let vectorClone = vector.clone(); vectorClone[1] += 1; matrixClone.swapCells(vector, vectorClone); children.push(new Node({matrix: matrixClone})); } return children; } |
єм?)
function action ( index, val ) { let matrixClone = Matrix.clone(); let vectorClone = vector.clone(); vectorClone[index] += val; matrixClone.swapCells(vector, vectorClone); children.push(new Node({matrix: matrixClone})); } if (vector[0] !== 0) { action ( 0, -1 ); } |
cyber, спасибо, карму не плюсует)
|
ЭМ, у меня от этого кода падает вкладка ( хром 42 ubuntu ) O_o
http://jsfiddle.net/9h3ub4nb/ var s = new WeakMap ( ); s.set( document.getElementById("is"), "5" ); console.log( s.get( document.getElementById("is") ) ); document.getElementById("is").remove(); setTimeout( function () { console.log( s ); }, 5000 ); |
Вложений: 1
Цитата:
|
KosBeg, через раз падает)
|
Цитата:
|
Safort, не делай так, ты мне мозг сломал. Я полчаса искал, куда сообщение делось)
|
trikadin,
просто решил |
Safort, да бред это полный. Постить ссылки в одной теме, а обсуждать в другой.
Тот, кто постит ссылку в "интересные..." -- он и не собирался начинать обсуждение. Если кто-то хочет обсудить -- логично, блин, сделать это прям в той же самой теме. "Не обсуждайте, потому что мне много писем на электронную почту прилетает" -- тоже аргументация на 5+. В электронной почте есть фильтры, например, с помощью которых можно помечать письма прочитанными. В общем, проблемы человека, который не может организовать свою систему подписок, не должны становиться проблемами всех остальных участников форума. |
народ, может отвлекетесь от срача?)
Цитата:
|
cyber, в твоем коде нет ничего криминальное и если это падает, то это косяк хрома, по хорошему его им надо зарепортить.
|
Цитата:
|
Цитата:
Цитата:
|
Gozar, я просто тестил как работает WeekMaps, как он очищает память и получил сюприз)
|
Цитата:
Может это не твои грабли, но на подобные я сам наступал, с тех пор зарекся называть id-шники: name, is, for... |
Цитата:
Цитата:
|
Gozar, спасибо, за совет)
|
Кто то мигрировал с kendo ui на ангуляр или react?
|
Часовой пояс GMT +3, время: 16:43. |