Что можно почитать на тему 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, время: 09:05. |