Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Is there an example? #3

Closed
claygod opened this issue Jul 29, 2016 · 11 comments
Closed

Is there an example? #3

claygod opened this issue Jul 29, 2016 · 11 comments

Comments

@claygod
Copy link

claygod commented Jul 29, 2016

Perhaps somewhere there is an example of ToDo or even something similar?

@Riim
Copy link
Owner

Riim commented Jul 29, 2016

Hi, for cellx+Rionite: TodoApp.
For run app:

> git clone https://github.com/Riim/Rionite.git
> cd Rionite
> npm i
open in browser ./examples/TodoApp.html

Similar should be for cellx+React, later I can do if you need.

@Riim
Copy link
Owner

Riim commented Jul 30, 2016

Воскресил протухший коннектор к реакту, там ещё парочка примеров получилась: 1, 2.

@claygod
Copy link
Author

claygod commented Jul 31, 2016

cellx+Rionite: TodoApp. что-то не запустился под Firefox.
Я подправил ссылки вот так:

<script src="./../dist/cellx/dist/cellx.js"></script>
<script src="./../dist/Rionite-with-polyfills.js"></script>

Прочитал также про RiftJS, это более микро по отношению к Rionite фреймворк, или он сугубо под node.js ?

@Riim
Copy link
Owner

Riim commented Aug 1, 2016

В RiftJS компонентная система сделана на основе шаблонизатора, это даёт возможность рендерить на сервере, но это же создаёт основной минус - минимальную автономность/встраиваемость: компонент написанный на RiftJS будет работать только в приложении написанном на RiftJS, а такое приложение сделать из уже работающего проекта весьма непростая задачка, предполагается, что проект изначально пишется на нём, тогда ещё всё более-менее нормально проходит. Да и вообще с изоморфностью в большинстве фреймворков сейчас всё плохо, наверно единственный фреймворк где этот момент додумали до какого-то завершённого состояния - это catberry, хотя там тоже есть к чему придраться, но уже не касательно изоморфности. В общем, наигравшись с изоморфностью я для себя сделал вывод, что если есть возможность индексировать приложение как-то иначе (1, 2, 3, 4), то лучше так и сделать, проблем получается в разы меньше.
Rionite в этом плане полная противоположность, компонентная система на основе custom-elements вряд ли даст нормально рендерить на сервере, но получающиеся компоненты наверно даже более автономны, чем плагины на jQuery. Вчера залил свои компоненты: opal-components, они пока конечно сырые совсем, но суть уже видна: просто подключается js-файлик компонента и дальше даже никаких $('.my-compinent').myComponent() не нужно, компоненты получаются в виде обычных тегов, вплоть до того, что основным фреймворком может быть, например, какой-нибудь Backbone, а контролы уже на Rionite, и так же как Backbone работает с обычным input[type=checkbox], точно так же он сможет работать с каким-нибудь opal-checkbox. При этом cellx+Rionite весят сопостовимо с jQuery, но в отличии от него могут быть и основным фреймворком для приложения.

@claygod
Copy link
Author

claygod commented Aug 1, 2016

Пробую потестировать вашу библиотеку на простом примере. Есть три сущности, токен, фильтр и вьюха:

var t1 = {
    par: cellx(3),
    get: cellx(function() {return this.par();})
};
var f1 = {
    par: t1.get(),
    exe: cellx(function() {return (this.par*2);})
};
var v1 = {
    par: f1.exe(),
    id: document.getElementById('test2'),
    render: cellx(function() {this.id.innerHTML = this.par;})
};

Если вызову v1.render(), в браузере отобразится 6, как и ожидаю.
Пробую связать ячейки:

t1('subscribe', function() {
    v1.render();
});

однако t1(5); не меняет цифру, т.е. каскад изменений не запускается. Как в такой ситуации правильно увязать эти три элемента?

@Riim
Copy link
Owner

Riim commented Aug 1, 2016

У вас две типичные для РП ошибки:

  1. в f1.exe вы читаете значение свойства в которое вы положили значение ячейки прочитав её, но в самой формуле чтения ячейки не происходит, соответственно не происходит и подписки на неё (f1.exe не подписана на изменения f1.par, она вообще ни на кого не подписана).
  2. в формуле ячейки должно быть только её вычисление, запись в innerHTML не является им, это уже реакция на изменение и должна находиться в её обработчике, во-первых, так идеологически правильно, во-вторых, ячейки не имеющие подписчиков и вычисляемых из них ячеек с подписчиками переходят в пассивный режим обновления - обновляются только непосредственно при чтении, и правильно делают, ведь их всё равно никто не слушает, зачем им зазря что-то вычислять (они же не знают, что программист положил реакцию на изменение прямо в формулу).

У меня получилось так: https://jsfiddle.net/x0uh6pgt/.

@Riim
Copy link
Owner

Riim commented Aug 1, 2016

Но вообще, запись cellx(function() {return t1.get();}) довольно забавно выглядит: если вычисляемая ячейка просто возвращает значение другой ячейки никак его не меняя, то может и смысла в её (вычисляемой ячейки) существовании нет?

@claygod
Copy link
Author

claygod commented Aug 1, 2016

В t1 это было сугубо для эксперимента, понятное дело, так странно связывать не стоит ))

Спасибо за разъяснение. Ещё вопрос: вы применили функцию addChangeListener а не subscribe , когда требуется одна, а когда другая?

@Riim
Copy link
Owner

Riim commented Aug 1, 2016

subscribe - это addChangeListener + addErrorListener. Первым аргументом приходит объект ошибки, он будет null если всё хорошо, вторым - объект события, он будет null если всё плохо))

@Riim
Copy link
Owner

Riim commented Aug 1, 2016

По аргументам, это я про subscribe написал.

@Riim
Copy link
Owner

Riim commented Nov 14, 2016

@Riim Riim closed this as completed Nov 14, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants