Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / покритикуйте bso / 25 сообщений из 50, страница 1 из 2
20.03.2016, 16:42
    #39196506
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте bso
Вот сварганил небольшой велосипед .
Буду признателен за замечания, предложения, критику.

P. S. пишу сюда, а не в HTML, JavaScript, VBScript, CSS, так как там сплошь лямбды, которые не всем обитателям того форума понятны, но должны быть обитателям этого.
...
Рейтинг: 0 / 0
21.03.2016, 22:29
    #39197520
Фёдор К
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте bso
ЕвгенийВ,

- А для чего файл todo.js в win-1251 кодировке? В таком раскладе если контент кириллицей, то получаем дрова.

Это специально так?
...
Рейтинг: 0 / 0
22.03.2016, 00:02
    #39197552
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте bso
Фёдор К
- А для чего файл todo.js в win-1251 кодировке? В таком раскладе если контент кириллицей, то получаем дрова.

Студия по умолчанию так делает, изменить нужно.
...
Рейтинг: 0 / 0
11.04.2016, 15:15
    #39212679
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте bso
...
Рейтинг: 0 / 0
20.04.2016, 12:59
    #39220085
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте bso
Попробую продемонстрировать использование. Можно например начать с датагрида, ибо многие не представляют себе жизни без столь полезного контрола. Ну а каждый уважающий уважающих себя грид, должен иметь пейджер, так что начнем с пейджера.
Вообще пейджеры встречаются разных видов, но самый лучший конечно же у judge! Так что его и попытаемся скопировать.
Код.
https://bso.codeplex.com/SourceControl/latest#bso/bso/scripts/typings/Samples/Pager/pager.ts
Пример использования.
https://bso.codeplex.com/SourceControl/latest#bso/bso/html/Samples/Pager/Pager.html
Что имеем в итоге.
Это typesript с точки зрения typesript. То есть при написании мы можем использовать все, что есть в этом языке строгая типизация, ООП, замыкания, женерики, вывод типов, функции высших порядков и т. д.
Это javascript с точки зрения javascript.
Это HTMLElement с точки зрения HTML и W3C.
Это класс с точки зрения ООП, экземпляр мы можем создать, функциональность которого мы можем расширить. Код мы можем повторно использовать, продать, подарить и т. д.
Это функция с точки зрения ФП, которую мы можем например передать в качестве аргумента другой функции.
Ну и вполне себе событийная модель в стиле C#.
...
Рейтинг: 0 / 0
20.04.2016, 13:22
    #39220115
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте bso
ЕвгенийВДобавил DataBinding
https://bso.codeplex.com/wikipage?title=Binding
Биндинг - это прошлый век :) Виртуальный DOM и Flux наше всё!
...
Рейтинг: 0 / 0
20.04.2016, 14:38
    #39220229
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте bso
skyANAБиндинг - это прошлый век :) Виртуальный DOM и Flux наше всё!
Ну если бы ReactJS меня устраивал, я бы остановился на нем.
Куча дополнительных знаний что бы привязать данные к отображению + омерзительное влияние на производительность, неопределенность, непрозрачность.
Я тоже хотел пойти по этой кривой дорожке, но вовремя остановился.

И так, что имеем.
1. вполне себе утиная типизация, typescript позволяет объявлять интерфейсы, ну и приводить объекты к ним. Это нужно для строгой типизации.
2. вполне себе есть свойства с гетторами/сеттрорами, которые можно добавлять динамически. Причем гетторы/сетторы обычные функции.
3. хотелось бы иметь рефлексию, дабы как в C#, но ее нет. Но мы всегда можем получить текст исполняемого кода и дернуть оттуда при помощи регулярных выражений что нибудь интересное.

Что получилось.
1. Раз утиная типизация, то нужен интерфейс, который описывает JSO. Это работа для прикладного программиста.
2. Некий генерик класс, который отвечает за биндинг и в котором типом параметром выступает описанный в пункте 1 интерфейс.
3. Пара методов отвечающих за привязку. Первый - простой биндинг, когда какое то свойство JSO напрямую отображается в какое то свойство. Вызов вполне себе строготипизированный
Код: javascript
1.
binder.BS(t, x=> x.value, x=> x.FirstName);

+ подсказки работают.
Второй - кастомный биндиг, на случай, если например есть сложный объект типа datetimepicker, вызов опять же строго типизированный
Код: javascript
1.
2.
3.
4.
5.
 binder.BC(t, t=> binder.Data.BirthDay,
                t=> dp.getDate(),
                e=> {
                    dp.setDate(binder.Data.BirthDay);
                });


Повторюсь, многие ошибки видны на стадии компиляции и intellisense работает.
4. После привязки объект класса из пункта 2, предоставляет свойство, которое выдает объект реализующий интерфейс из пункта 1. Например для
Код: javascript
1.
binder.BS(t, x=> x.value, x=> x.FirstName);


Попытка считать свойство FirstName приводит к тому, что возвращается x.value, а запись приводит к установке x.value, где x - input[type=text].
И никаких тебе прослушиваний onchange, никаких виртуальных DOM, есть один реальный и его хватает за глаза.
...
Рейтинг: 0 / 0
20.04.2016, 16:09
    #39220382
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте bso
ЕвгенийВКуча дополнительных знаний что бы привязать данные к отображению + омерзительное влияние на производительность, неопределенность, непрозрачность.
Конкретные проблемы сможете озвучить?
...
Рейтинг: 0 / 0
20.04.2016, 16:11
    #39220386
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте bso
автор3. хотелось бы иметь рефлексию, дабы как в C#, но ее нет.Она в js принципиально невозможна.
Разве что в комплекте с прикладным js-кодом компилятор научится генерить библиотеку, описывающие то, чего в js нет, и как-то привязывающую это к прикладному коду.
...
Рейтинг: 0 / 0
20.04.2016, 16:14
    #39220391
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте bso
More Benchmarks: Virtual
DOM vs Angular 1 & 2 vs Mithril.js vs cito.js vs The Rest


Что-то не видно у реакта омерзительной производительности :)
...
Рейтинг: 0 / 0
20.04.2016, 16:30
    #39220424
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте bso
Antonariy,
Я не совсем правильно выразился, мне нужно было получить нечто типа expression в c#,
еще проще из выражения
объект.имяСвойства получить имяСвойства.
Что бы использовать например как в razor
@Html.EditorFor(model=>model.LOGIN)
...
Рейтинг: 0 / 0
20.04.2016, 16:37
    #39220433
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте bso
skyANAКонкретные проблемы сможете озвучить?
Ну например как это все дебажить?
...
Рейтинг: 0 / 0
20.04.2016, 17:30
    #39220500
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте bso
ЕвгенийВskyANAКонкретные проблемы сможете озвучить?
Ну например как это все дебажить?
Это всё? Выше было больше озвучено :) В Visual Studio Code, WebStorm, либо в браузере.
...
Рейтинг: 0 / 0
20.04.2016, 17:44
    #39220508
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте bso
skyANAЭто всё? Выше было больше озвучено :) В Visual Studio Code, WebStorm, либо в браузере.
Ну так то да, можно тыкаться по шагам по 100500 строк кода, периодически натыкаясь на места, которые были хз когда и кем инициализированы. Милейшее занятие.
Которое можно иногда разнообразить зубрением например этого коротенького списочка .
...
Рейтинг: 0 / 0
20.04.2016, 17:55
    #39220513
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте bso
ЕвгенийВskyANAЭто всё? Выше было больше озвучено :) В Visual Studio Code, WebStorm, либо в браузере.
Ну так то да, можно тыкаться по шагам по 100500 строк кода, периодически натыкаясь на места, которые были хз когда и кем инициализированы. Милейшее занятие.
Которое можно иногда разнообразить зубрением например этого коротенького списочка .
Странные у Вас аргументы против React, мне не понятные..
Хотя если Вы вместо нормальной отладки тыкаетесь куда-то там 100500 раз, при этом зачем-то читаете документацию по Angular, то начинает становиться понятно, откуда растут ноги Вашей боли :)
...
Рейтинг: 0 / 0
20.04.2016, 17:58
    #39220518
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте bso
И вообще 100500 строк плохого кода - это не проблема используемой библиотеки, или фреймворка, а проблема кривых рук.
...
Рейтинг: 0 / 0
20.04.2016, 18:39
    #39220556
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте bso
Ну если сравнивать именно с React.
Stateful Component
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
var Timer = React.createClass({
  getInitialState: function() {
    return {secondsElapsed: 0};
  },
  tick: function() {
    this.setState({secondsElapsed: this.state.secondsElapsed + 1});
  },
  componentDidMount: function() {
    this.interval = setInterval(this.tick, 1000);
  },
  componentWillUnmount: function() {
    clearInterval(this.interval);
  },
  render: function() {
    return (
      <div>Seconds Elapsed: {this.state.secondsElapsed}</div>
    );
  }
});

ReactDOM.render(<Timer />, mountNode);


Есть функции о которых надо знать, типа componentWillUnmount, DOM перестраивается каждый раз, причем сначала сравнивается с виртуальным DOM. Нет строгой типизации.
Вызов componentWillUnmount в принципе приведет очистке ресурсов, но про это надо еще не забыть.
bso
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
var SecondsElapsed = div(t=>
{
    var counter = 0;
    setInterval(() =>
    {
        t.innerText = 'Seconds Elapsed: ' + counter++;
    }, 1000);
});


Меньше кода. Меняется всего одно свойство. Строгая типизация. Про очистку ресурсов нужно думать самому.
...
Рейтинг: 0 / 0
20.04.2016, 19:18
    #39220585
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте bso
ЕвгенийВ, Вы походу не в теме, что уже поддерживается ES2015 синтаксис, а также что TypeScript поддерживает React/JSX

И DOM не перестраивается каждый раз, и не сравнивается с виртуальным, если Вы не забыли указать key.
А об этом и о React lifecycle и lifecicle hooks подробно расписано в документации. Может Вам конечно проще её не читать, а запилить свой велосипед, но это не объективно.
...
Рейтинг: 0 / 0
21.04.2016, 10:34
    #39220927
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте bso
skyANAЕвгенийВ, Вы походу не в теме, что уже поддерживается ES2015 синтаксис,

Кем? IE? Недавно на это наткнулся-споткнулся.

skyANAа также что TypeScript поддерживает React/JSX

Про это я писал еще в 15 годе!
Visual Studio 2015 Update 1
...
Рейтинг: 0 / 0
21.04.2016, 10:52
    #39220960
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте bso
ЕвгенийВskyANAЕвгенийВ, Вы походу не в теме, что уже поддерживается ES2015 синтаксис,

Кем? IE? Недавно на это наткнулся-споткнулся.
Откройте для себя webpack + babel и для IE у Вас будет ES2015 транспайлится в ES5

ЕвгенийВskyANAа также что TypeScript поддерживает React/JSX

Про это я писал еще в 15 годе!
Visual Studio 2015 Update 1
Молодец! Тогда чего жалуетесь на отсутсвие типизации?
...
Рейтинг: 0 / 0
21.04.2016, 11:15
    #39220993
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте bso
skyANAОткройте для себя webpack + babel и для IE у Вас будет ES2015 транспайлится в ES5

мне хватает typescript.

skyANAМолодец! Тогда чего жалуетесь на отсутсвие типизации?
Выражения типа
Код: html
1.
<div>Seconds Elapsed: {this.state.secondsElapsed}</div>


никак не типизированы и к div нет никакого доступа.

skyANAИ DOM не перестраивается каждый раз, и не сравнивается с виртуальным, если Вы не забыли указать key.
А об этом и о React lifecycle и lifecicle hooks подробно расписано в документации. Может Вам конечно проще её не читать, а запилить свой велосипед, но это не объективно.

Взялся дебажить пример на который давал ссылку выше.
После примерно 3 минут кликания на "шаг с заходом" хром вежливо послал меня, ласково написав "Опаньки", так и не выпустив из бесконечных вызовов.
И может Вы мне объясните дурачку, зачем в react.js такой код?
Код: javascript
1.
 if ("development" !== 'production') {
...
Рейтинг: 0 / 0
21.04.2016, 12:49
    #39221109
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте bso
ЕвгенийВskyANAОткройте для себя webpack + babel и для IE у Вас будет ES2015 транспайлится в ES5

мне хватает typescript.

skyANAМолодец! Тогда чего жалуетесь на отсутсвие типизации?
Выражения типа
Код: html
1.
<div>Seconds Elapsed: {this.state.secondsElapsed}</div>


никак не типизированы и к div нет никакого доступа.
Если Вы привыкли к TypeScript, то используйте TypeScript при разработки React приложений, что Вам мешает никак не пойму?
И откройте для себя ref, если так хочется иметь доступ к div.

Ваш код будет выглядеть как-то так так:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
class Timer extends React.Component<ITimerState> {
  public state : ITimerState;

  constructor() {
    super();
    this.state = { secondsElapsed: 0 };
  }

  /* ... */

  public render() {
    return (
      <div ref="secondsElapsedContainer">Seconds Elapsed: { this.state.secondsElapsed }</div>
    );
  }
}


А так доступ к вожделенному Вами диву:
Код: javascript
1.
var div = React.findDOMNode<HTMLDivElement>(this.refs["secondsElapsedContainer"]);
...
Рейтинг: 0 / 0
21.04.2016, 12:53
    #39221116
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте bso
ЕвгенийВПосле примерно 3 минут кликания на "шаг с заходом" хром вежливо послал меня, ласково написав "Опаньки", так и не выпустив из бесконечных вызовов.
И может Вы мне объясните дурачку, зачем в react.js такой код?
Код: javascript
1.
 if ("development" !== 'production') {


Вы же разрабодчик с опытом, а проблему описываете как вчерашний студент :) Дайте больше конкретики.
...
Рейтинг: 0 / 0
21.04.2016, 14:26
    #39221268
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте bso
skyANAА так доступ к вожделенному Вами диву:
Код: javascript
1.
var div = React.findDOMNode<HTMLDivElement>(this.refs["secondsElapsedContainer"]);



Я наоборот бегу от таких штук
Код: javascript
1.
var val = $('div[id^=subparagraphs] textarea[id^=taWordingQuestion]', div).val();



skyANAВы же разрабодчик с опытом, а проблему описываете как вчерашний студент :) Дайте больше конкретики.
Я действительно не понимаю, почему в этом файле
https://facebook.github.io/react/js/react.js
строка if ("development" !== 'production') встречается 112?
Почему не заменить просто на true? :)
...
Рейтинг: 0 / 0
21.04.2016, 14:33
    #39221280
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте bso
ЕвгенийВ,

Посмотри как-нибудь на досуге Mithril .
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / покритикуйте bso / 25 сообщений из 50, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]