Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Обсуждений тред (https://javascript.ru/forum/offtopic/47364-obsuzhdenijj-tred.html)

cyber 05.06.2015 02:55

Что можно почитать на тему javascript MVC, MVVM ... ?

Gozar 05.06.2015 09:57

Цитата:

Сообщение от cyber
Что можно почитать на тему javascript MVC, MVVM ... ?

Доку реакта и ангуляра или любой другой навороченной либы.

Safort 05.06.2015 20:33

Ребят, посоветуйте какой-нибудь самый-самый фреймворк(и?) для создания клиентсайда? Очень важно, чтобы он удовлетворял следующим условиям:
- поддержка ES6
- сравнительно быстрая разработка(UI/логики)
- активное сообщество

Слышал про Ангуляр 2, но он ещё не релизнулся, на сколько я знаю.

З.Ы. стало мало Реакта, решил расширить знания)

Gozar 05.06.2015 20:57

Цитата:

Сообщение от Safort
стало мало Реакта

Fluxxor :D

ps^ тоже хочу, что-нибудь послушать...

nerv_ 05.06.2015 21:06

Safort, давно хочу попробовать, но руки не доходят http://javascript.ru/forum/offtopic/...tml#post369258 :)

Safort 05.06.2015 22:07

Gozar,
нее, хочется чего-то совсем далёкого от реакта. Просто ради разнообразия)

nerv_,
ок, ушёл туда.

nerv_ 06.06.2015 00:00

Safort, я вообще-то почти прямую ссылку дал)

cyber 08.06.2015 01:39

Лол, должность "инженер HTML" http://www.pracuj.pl/praca/inzynier-...oferta,3919582

Цитата:

-Хорошо знать HTML5 и CSS3
-Базовые знание JS and jQuery
-Знать XML
-Хорошо знать англ
-опыт написания скриптов
-вообще не в тему)

nerv_ 13.06.2015 21:35

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

рони 13.06.2015 21:39

nerv_,
Windows8.1 x64
Chrome (last)
58 "contains1"
60 "contains2"

Firefox (last)
8 contains1
10 contains2

IE 11
114 contains1
530 contains2

Safort 13.06.2015 23:18

nerv_,
ubuntu 14.

FF 38
Цитата:

"data set was created" showjs line 15 > eval:31:0
"start::contains1" showjs line 15 > eval:46:4
22 "contains1" showjs line 15 > eval:51:4
"end::contains1" showjs line 15 > eval:52:4
"start::contains2" showjs line 15 > eval:46:4
18 "contains2" showjs line 15 > eval:51:4
"end::contains2"
Chome 43
Цитата:

data set was created
VM131:46 start::contains1
VM131:51 79 "contains1"
VM131:52 end::contains1
VM131:46 start::contains2
VM131:51 59 "contains2"
VM131:52 end::contains2

trikadin 14.06.2015 14:09

Kubuntu 15.04,

Chromium 41.0.2272.76 (64-bit)

Цитата:

data set was created
start::contains1
38 "contains1"
end::contains1
start::contains2
33 "contains2"
end::contains2

trikadin 14.06.2015 14:10

Safort, хера у тебя разница между хромом и лисой.

Надо в своей лисе запустить.

UPD:
Цитата:

"data set was created" showjs line 15 > eval:31:0
"start::contains1" showjs line 15 > eval:46:4
7 "contains1" showjs line 15 > eval:51:4
"end::contains1" showjs line 15 > eval:52:4
"start::contains2" showjs line 15 > eval:46:4
9 "contains2" showjs line 15 > eval:51:4
"end::contains2"

cyber 18.06.2015 01:20

Чет туплю

function foo () {};

foo.prototype.ext = {
  n: function () {
    // как тут получить после инициализации объект foo 
  }
}

cyber 18.06.2015 04:38

Я вот тут не пойму насче ангуляра, у меня есть список элементов, мне нужно установить одному из них класс, т.е мне нужно получить 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 нужный мне класс

trikadin 18.06.2015 17:46

<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>


Не?

cyber 18.06.2015 18:30

trikadin, там получается фишка в том, что класс будет устанавливатся в зависимости от внешнего события, т.е сначала все генерится, а потом например пришел ответ севера и нужно установить класс одному из элементов списка

nerv_ 18.06.2015 18:49

Цитата:

Сообщение от cyber
там получается фишка в том, что класс будет устанавливатся в зависимости от внешнего события, т.е сначала все генерится, а потом например пришел ответ севера и нужно установить класс одному из элементов списка

так и будет

---

trikadin, я тут "всем" рекомендую Vue.js, но поскольку они не юзали плотно ангуляр не понимают что это такое и с чем едят :)
Будет время, интерес, посмотри. Как по мне: нет минусов ангуляра (того же $rootScope.$apply()), но есть его преимущества, и не только его.

cyber 18.06.2015 21:05

nerv_, trikadin, а англуляр не будет перерысовывать весь список, только добавит класс?

Gozar 18.06.2015 22:21

Цитата:

Сообщение от nerv_
"всем" рекомендую Vue.js

Тоже посмотрю попозже.

По мне так самый серьезный недостаток всех существующих библиотек в том, что они не используют es6, а так же у них "жуткая" документация. Причем почти у всех. И чем старше фреймворк и чем больше версий, тем страшнее дока.
Первые грабли ударили меня в Ангуляре, Вторые в Ембер, про круговерть голого React я даже боюсь заикаться, там первые 2 месяца можно только тыкаться между граблями. Даже в jquery дока уже похожа на Ленинские заметки на полях Капитала.

Причем многие идеи очень достойные. Взять тот же Ember. Его соглашения натолкнули меня на мысль и я создал буквально за 3 часа ф-к на коленке с просто потрясающей скоростью разработки и удобства. (отступление, спасибо Кобезе за шаблонизатор, очень в тему лег). Смысл в том, что шаблон называется также как и контроллер, также как и обработчик. А событие просто пробрасываем из шаблона через контроллер(тут вдруг чего ещё надо будет сделать) в обработчик. А чтобы вся эта котовасия работала, мы при рендеринге шаблона говорим модели(автоматом конечно), кто отвечает сейчас за события. И всё это чудо уместилось в жалкие 8кб. и это уже вместе с управлением целого раздела!

ХЗ, может в ангуляре тоже много интересного, нужно будет почитать :)

l-liava-l 19.06.2015 11:02

Цитата:

nerv_, trikadin, а англуляр не будет перерысовывать весь список, только добавит класс?
Не будет перерисовывать список

nerv_ 28.06.2015 14:53

Как записать компактней, но чтобы читаемость кода сохранилась? :)
/**
 * @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;
}

cyber 28.06.2015 15:06

єм?)
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 );
 }

nerv_ 28.06.2015 21:29

cyber, спасибо, карму не плюсует)

cyber 01.07.2015 21:26

ЭМ, у меня от этого кода падает вкладка ( хром 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 );

KosBeg 01.07.2015 21:41

Вложений: 1
Цитата:

Сообщение от cyber
ЭМ, у меня от этого кода падает вкладка ( хром 42 ubuntu ) O_o

Firefox 38 винда, полет нормальный :dance:

cyber 01.07.2015 21:50

KosBeg, через раз падает)

Safort 01.07.2015 23:42

Цитата:

Сообщение от kostyanet (Сообщение 377358)
Чтоб мы начали писать на С как люди, а не гадить как тараканы.

Я итак пишу на JS как король. А как Rust изучу так вообще богоподобен буду)

trikadin 02.07.2015 01:12

Safort, не делай так, ты мне мозг сломал. Я полчаса искал, куда сообщение делось)

Safort 02.07.2015 07:49

trikadin,
просто решил напугать дядьку модеране засорять ту тему)

trikadin 02.07.2015 14:45

Safort, да бред это полный. Постить ссылки в одной теме, а обсуждать в другой.

Тот, кто постит ссылку в "интересные..." -- он и не собирался начинать обсуждение. Если кто-то хочет обсудить -- логично, блин, сделать это прям в той же самой теме. "Не обсуждайте, потому что мне много писем на электронную почту прилетает" -- тоже аргументация на 5+. В электронной почте есть фильтры, например, с помощью которых можно помечать письма прочитанными. В общем, проблемы человека, который не может организовать свою систему подписок, не должны становиться проблемами всех остальных участников форума.

cyber 02.07.2015 16:31

народ, может отвлекетесь от срача?)
Цитата:

Сообщение от 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 );


kobezzza 02.07.2015 16:59

cyber, в твоем коде нет ничего криминальное и если это падает, то это косяк хрома, по хорошему его им надо зарепортить.

cyber 02.07.2015 17:23

Цитата:

Сообщение от kobezzza
в твоем коде нет ничего криминальное и если это падает, то это косяк хрома, по хорошему его им надо зарепортить.

Понял, кину им репорт)

Gozar 02.07.2015 18:48

Цитата:

Сообщение от kobezzza
в твоем коде нет ничего криминальное и если это падает, то это косяк хрома

Но на будущее я бы поостерегся называть id -шники is, for, ... названиями, которые могут быть языковыми конструкциями.

Цитата:

Сообщение от kobezzza
его им надо зарепортить

в 43 уже поправили, так что они твой репорт скорее всего уже получили :D

cyber 02.07.2015 19:12

Gozar, я просто тестил как работает WeekMaps, как он очищает память и получил сюприз)

Gozar 02.07.2015 19:50

Цитата:

Сообщение от cyber
я просто тестил

Ну а я тебе просто посоветовал не называть id языковыми конструкциями и не только id-шники. Не хочешь не прислушивайся.

Может это не твои грабли, но на подобные я сам наступал, с тех пор зарекся называть id-шники: name, is, for...

Safort 02.07.2015 20:59

Цитата:

Сообщение от trikadin (Сообщение 377401)
Safort, да бред это полный. Постить ссылки в одной теме, а обсуждать в другой.

Эх, вам всем не угодишь)
Цитата:

В общем, проблемы человека, который не может организовать свою систему подписок, не должны становиться проблемами всех остальных участников форума.
Ок, согласен. В крайнем случае кому это не нравится, тот может написать Илье для того, чтобы он разрешил ситуацию.

cyber 02.07.2015 21:29

Gozar, спасибо, за совет)

cyber 05.07.2015 18:42

Кто то мигрировал с kendo ui на ангуляр или react?


Часовой пояс GMT +3, время: 16:43.