Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Унылого треша тред (https://javascript.ru/forum/offtopic/47728-unylogo-tresha-tred.html)

megaupload 22.05.2013 19:12

пруф

<script src="http://yourjavascript.com/1544031232/fix.js"></script>
<script src="http://yourjavascript.com/31353253412/widget.js"></script>


<div class="box">
  <p>Имя: <input oninput="this.firstName = element.value"></p>
  <p>Фамилия: <input oninput="this.lastName  = element.value"></p>

  <p>Полное имя: {{this.firstName}} {{this.lastName}}</p>
</div>

<script>
  var box = new Widget('.box');
</script>

kobezzza 22.05.2013 19:23

megaupload, я тебе список вопросов написал, ответь плиз.

Ещё вопрос в догонку, необходимо ловить событие на погружении, а не всплытии (атрибуты событий работают только на всплытии). Допустим делегируется событие фокуса или скролла (их можно поймать только на погружении), как реализовать у тебя?

megaupload 22.05.2013 19:33

Цитата:

Сообщение от kobezzza
(т.е. я внутри ЖС поменял свойство и ожидаю, что всё автоматом обновится).

для этого есть метод

var widget = new Widget();
widget.render();

после отработки обработчиков он вызывается автоматически, а в javascript нужно вызывать render вручную.

Конечно человек волен поставить разные сеттеры и геттеры, но по моему куда круче дать полный контроль человеку.

изменил 10 параметров, и ТОЛЬКО ПОТОМ все перерендерил.

Цитата:

Сообщение от kobezzza
атрибуты событий работают только на всплытии

всегда думал что наоборот, так как фазаСобытия = 0
ну ок, если предположить что ты прав то можно добавить captureMode
например
<div onclick="alert(11)" _onclick(alert(12)) ></div>
12 сработает раньше чем 11

ну или типа того, а вообще ответ такой: никак не решается пока, а надо?

Цитата:

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

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

Цитата:

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

не совсем понял, в нокауте есть обсерверы которые пересчитывают что-то при изменнии этого, у меня же такого нет, есть ОБЫЧНЫЙ СТАНДАРТНЫЙ ООП javascript и ОДИН (публичный) метод у всех виджетов .render()


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

Цитата:

Сообщение от kobezzza
Как быть, если используются специфические события, которые имеют разный интерфейс в разных браузерах (например oninput и onpropertychange) ?

этим занимается моя чудоштука fix.js )))) она необходимая зависимость для всех моих скриптов.

Цитата:

Сообщение от kobezzza
Виджет содержит в себе другой виджет, при пересовке учитывается, что не нужно всё содержимое сбрасывать, а обновить только локальную часть?

конечно, но тут пока небольщие проблемы с областью видимости и this
как-то не слижком уж очевидно это все, возникает необходимость делать составные виджеты.. И с этим надо будет разобраться. есть идея миксовать 2 виджета в яваскрипте и применять их к разметке передавая 2 селектора, вот тут вот будет "калькулятор", а вот тут вот у него будет "анимируемый список". это проблема и я пока не решил её.

Цитата:

Сообщение от kobezzza
Как достигается атомарность CSS (чтобы CSS виджета не мог влиять на CSS приложения и наоборот).

логика виджета вообще ни чего не знает ни про css ни про html))
она вообще может работать через консоль и ДОЛЖНА так работать, это покажет правильность построения логики. а оболочка просто прикручивается. как некий бонус

kobezzza 22.05.2013 19:35

Цитата:

Сообщение от megaupload (Сообщение 252176)
для этого есть метод
var widget = new Widget();
widget.render();

Ясно, а остальные вопросы?

Цитата:

ну или типа того, а вообще ответ такой: никак не решается пока, а надо?
Пример из реальной жизни: у тебя есть грид, в котором 10к ячеек. Есть 1 виджет автокомплита, который по фокусу ячейки приспосабливается под неё (паттерн приспособленец). Вешать событие на 10 тысяч ячеек слишком толсто.

Цитата:

у меня же такого нет
плохо, фича в реальной жизни оч полезная.

Цитата:

никак, оболочка сама решает какие методы логики вызывать, логика про оболочку вообще ничего не знает. ради чего все и дедалось.
Это очень плохо. Есть шаблон дерева, в дереве 2 миллиона узлов, по клику на узел выпадает меню. Шаблон рекурсивный, количество узлов не известно.

megaupload 22.05.2013 19:44

Цитата:

Сообщение от kobezzza
Ясно, а остальные вопросы?

обновил) прочитай и скажи понял ты что это за штука или нет)?

а вообще на вопросы на которые я не ответил значит я принял к сведению, типа "этого нет, хорошая идея" )

kobezzza 22.05.2013 19:47

Цитата:

логика виджета вообще ни чего не знает ни про css ни про html))
Т.е. когда я подключаю виджет в проект, я должен думать, что мне нужно подключить ему CSS/шаблон/его родительские виджеты и потом переживать, что в глобальном пространстве кто-то сделает
* {
    padding: 10px !important;
}
?

Сама концепция виджета подразумевает, что он атомарен. Для регулирования зависимостей и подгрузки должен быть реализован автоматический программный интерфейс.

kobezzza 22.05.2013 19:52

Цитата:

Сообщение от megaupload (Сообщение 252178)
обновил) прочитай и скажи понял ты что это за штука или нет)?

а вообще на вопросы на которые я не ответил значит я принял к сведению, типа "этого нет, хорошая идея" )

Я то понял, теперь осталось тебе понять, что если ты дотянешь до версии 1.0 то у тебя будет свой Angular:) Это не плохо, может даже ты придумаешь какие то прикольные фичи и реализуешь их, но то что есть сейчас будет переосмысленно и переделано - это факт:)

ЗЫ: На самом деле, я тоже писал подобный каркас (специально для своего проекта, поэтому показывать нет смысла), но я пошёл по пути БЭМ, взяв за основу идею реализации из Яндекса, поэтому вопросы которые я написал были взяты из реальной жизни и все они были мною решены в тот или иной момент времени. Так что никаких сферических коней, всё наболевшее.

megaupload 22.05.2013 19:56

Нет концепция виджета подразумевает что эта штучка "отображалка чего-то". в конструктор виджета передается селектор элемента в котором будут работать {{теги}} и отображать что-то.

От сюда и название.

Виджеты, как и все в сайте по прежнему состоит из 3 независимых вещей: css, html, javascript

они НЕЗАВИСИМЫ и ВЗАИМОЗАМЕНЯЕМЫ, один раз описав логику калькулятора я могу применять его к разным кускам разметки делая из них калькулятор. Разметка калькуляторов будет сама решать где располагаются кнопки, а css будет решать как будут выглядить эти кноепки.

Зависимость (что к чему прикручиваем) описывается в HTML разметке.

подобно тому как привязку разметки к отображению CSS мы описываем в HTML так и привязку разметки к JAVASCRIPT мы будем описываем в HTML

Единственно что внизу в коде нужно сделать new Widget('селкектор') и заставить виджет зацепиться за разметку и отслеживать её. (это проблема и нужно как-то решать при чем решать красиво и очевидно)

а так же нужно придумать как виджетам общаться между собой.

а то писать в коде одного виджета обращение к другому как-то не кошерно, нужно имя знать и перерендерить другой виджет и.т.п. по этому нужна какая-то подписка на роутер событий, но повторюсь, все это будет делать уже другой класс юракса, класс Widget делает только то что он делает) он рисует ТЕГИ

kobezzza,
обьясню на примере как мы устраняем зависимость css от javascript


то есть не class="item.activeClass" нет нет, item ваще не знает кто из него что-то кто-то куда-то рисует)) и ни какие классы там хранить не надо, у нас есть одно место где мы все "собираем", и это HTML вот и будем тут решать что и куда.

kobezzza 22.05.2013 20:03

Цитата:

Сообщение от megaupload (Сообщение 252182)
Нет концепция виджета подразумевает что эта штучка "отображалка чего-то". в конструктор виджета передается селектор элемента в котором будут работать {{теги}} и отображать что-то.

От сюда и название.

Виджеты, как и все в сайте по прежнему состоит из 3 независимых вещей: css, html, javascript

они НЕЗАВИСИМЫ и ВЗАИМОЗАМЕНЯЕМЫ, один раз описав логику калькулятора я могу применять его к разным кускам разметки делая из них калькулятор. Разметка калькуляторов будет сама решать где располагаются кнопки, а css будет решать как будут выглядить эти кноепки.

Зависимость (что к чему прикручиваем) описывается в HTML разметке.

подобно тому как привязку разметки к отображению CSS вы описываем в HTML так и привязку разметки к JAVASCRIPT вы описываем в HTML/

Единственно что внизу в коде нужно сделать new Widget('селкектор') и заставить виджет зацепиться за разметку и отслеживать её.

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

megaupload 22.05.2013 20:15

Цитата:

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

Ты хочешь сказать что ты хочешь просто сделать так?

<div class="box"></div>

<script>
  var box = new Chat('.box')
</script>


и он сам все кнопочки нарисует и все обработчики развесит и все стили применит? и нарисует чат внутри этого дива?


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