Залил на сайт версию 3.3.0.0 в которой наличествует CSSS! — css-script engine.
CSSS! это в общем-то простой (я бы даже сказал спартанский) script'овый движок который тем не менее позволяет делать на удивление много вещей.
Например всякого рода простейшие автоматы: click на эту кнопку — enable ту группу inputs. Валидация. Всякого рода форматирование и локализация. Простые рачсеты типа totals. Короче смотрите примеры в html_samples/csss!/ папке.
CSSS! живет рядом с behaviors — они друг друга дополняют. Из CSSS! можно вызывать native методы (on_script_call).
(кажется я родил очередной лисапет. наверное судьба такая)
Здравствуйте, TK, Вы писали:
TK>Здравствуйте, c-smile, Вы писали:
CS>>CSSS! это в общем-то простой (я бы даже сказал спартанский) script'овый движок который тем не менее позволяет делать на удивление много вещей. Например всякого рода простейшие автоматы: click на эту кнопку — enable ту группу inputs. Валидация. Всякого рода форматирование и локализация. Простые рачсеты типа totals. Короче смотрите примеры в html_samples/csss!/ папке.
TK>хм. не нашел примера на тему validation. в behavior_form.cpp ничего похожего нет...
Validation примеры будут в след билдах. В CSSS! надо еще regexp втащить.
CS>>CSSS! живет рядом с behaviors — они друг друга дополняют. Из CSSS! можно вызывать native методы (on_script_call).
TK>А можно использовать HTMLayoutAttachEventHandler для получения on_script_call?
Да.
CS>>(кажется я родил очередной лисапет. наверное судьба такая)
TK>В sciter такой будет?
Здравствуйте, c-smile, Вы писали:
CS>CSSS! это в общем-то простой (я бы даже сказал спартанский) script'овый движок который тем не менее позволяет делать на удивление много вещей. Например всякого рода простейшие автоматы: click на эту кнопку — enable ту группу inputs. Валидация. Всякого рода форматирование и локализация. Простые рачсеты типа totals. Короче смотрите примеры в html_samples/csss!/ папке.
хм. не нашел примера на тему validation. в behavior_form.cpp ничего похожего нет...
CS>CSSS! живет рядом с behaviors — они друг друга дополняют. Из CSSS! можно вызывать native методы (on_script_call).
А можно использовать HTMLayoutAttachEventHandler для получения on_script_call?
CS>(кажется я родил очередной лисапет. наверное судьба такая)
В sciter такой будет?
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, aloch, Вы писали:
A>Здравствуйте, c-smile, Вы писали:
A>Пример label-for-activation.htm вызывает падение browse.exe после примерно трех щелчков по разным label
Ага, спсибо. Поймал.
Чего-то VC optimizer невзлюбил один мой файл...
Поправил. Залил на сайт. Можно забирать.
Здравствуйте, TK, Вы писали:
TK>Здравствуйте, c-smile, Вы писали:
TK>>>А можно использовать HTMLayoutAttachEventHandler для получения on_script_call? CS>>Да.
TK>А как его из CSS звать? У меня такое только для behaviors прокатило...
Здравствуйте, c-smile, Вы писали:
CS>Должно прийти на on_script_call() на те event handlers что сидят на view. (т.е. HTMLayoutWindowAttachEventHandler) CS>Попробуй.
хм. что-то не приходит...
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, TK, Вы писали:
TK>Здравствуйте, c-smile, Вы писали:
CS>>Должно прийти на on_script_call() на те event handlers что сидят на view. (т.е. HTMLayoutWindowAttachEventHandler) CS>>Попробуй.
TK>хм. что-то не приходит...
есть какие-нибудь новости? В Sciter уведомления INITIALIZATION_EVENTS.BEHAVIOR_DETACH после удаления элемента так и не приходят...
Еще раз, что-то держит элемент.
Я вообще не понимаю зачем для Sciter нужна обертка DOM в .NET.
В принципе в .NET должен быть обработчик host callback вызовов. Апотому обработку событий эффективнее делать в скрипте sciter.
host callback как gate UI <-> логика вообще представляется очень привлекательным. Эдакий ultimate layer splitter.
.NET имеет смысл для htmlayout. Это да. Потому как behaviors надо же на чем-то писать...
Честно говоря на C++ даже в общем-то как-то поприятнее-то будет. Но это уж дело личных предпочтений.
select#INPUT_CODE
{
assigned! :
self.value-changed(); /* call when-value-changed event handler as a function */
value-changed! :
$(code#INPUT_CODE):value = self:value;
}
В итоге в code#INPUT_CODE попадает значение из выбранного option[value], а мне нужно, что бы присвоилось не значение а содержимое (текст)
Если написать вот так: $(code#INPUT_CODE):value = $c(caption):content; то не прокатывает,
и так тоже: $(code#INPUT_CODE):value = $c(option:current):content;
Если написать вот так: $(code#INPUT_CODE):value = $c(option:current);
получаю {undefined}. Но это в принципе понятно.
Здравствуйте, c-smile, Вы писали:
CS>Попробуй так:
Заработало !!!
Но есть пара особенностей:
1. При первоначальной загрузке страницы (хотя select имеет определенный выбранный пункт) у code#INPUT_CODE значение пустое пока не перещелкнешь select.
2. При перещелкивании select с помощью курсорных клавиш, значение у code#INPUT_CODE меняется на адекватное, но при этом сам select остается неизменным (не перерисовывается).
как можно побороть пункт 1 ?
по второму щас постараюсь прислать пример.
есть какие-нибудь новости? В Sciter уведомления INITIALIZATION_EVENTS.BEHAVIOR_DETACH после удаления элемента так и не приходят...
CS>Еще раз, что-то держит элемент.
А в HTMLayout не держит? Реализация для Htmlayout/Sciter отличается только тем, что в одном случае дергаются функции Htmlayout а в другом, SciterGetDomApi() и вызовы SciterDomApi — в HTMLayout при удалении все детачится, в Sciter нет. Я правильно понимаю, что HELEMENT это просто поинтер на какой-то C++ объект? Если смотреть на него отладчиком то, счетчик ссылок в ноль уходит.
Например, почему element.Parent.InnerHtml = "" приводит к вызову BEHAVIOR_DETACH для element, а если заменить на element.DetachElement() нет?
CS>Я вообще не понимаю зачем для Sciter нужна обертка DOM в .NET.
Есть обертка, она может работать или с Htmlayout или со Sciter. какой смысл отрезать для варианта со Sciter DOM, раз он уже там есть?
CS>В принципе в .NET должен быть обработчик host callback вызовов. Апотому обработку событий эффективнее делать в скрипте sciter. host callback как gate UI <-> логика вообще представляется очень привлекательным. Эдакий ultimate layer splitter.
Не спорю С другой стороны, есть некоторые заморочки с CompactFramework — там проще использовать htmlayout.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, TK, Вы писали:
CS>>Еще раз, что-то держит элемент.
TK>А в HTMLayout не держит? Реализация для Htmlayout/Sciter отличается только тем, что в одном случае дергаются функции Htmlayout а в другом, SciterGetDomApi() и вызовы SciterDomApi — в HTMLayout при удалении все детачится, в Sciter нет. Я правильно понимаю, что HELEMENT это просто поинтер на какой-то C++ объект? Если смотреть на него отладчиком то, счетчик ссылок в ноль уходит.
TK>Например, почему element.Parent.InnerHtml = "" приводит к вызову BEHAVIOR_DETACH для element, а если заменить на element.DetachElement() нет?
Здравствуйте, c-smile, Вы писали:
TK>>Например, почему element.Parent.InnerHtml = "" приводит к вызову BEHAVIOR_DETACH для element, а если заменить на element.DetachElement() нет?
CS>Ты можешь собрать минимальный пример для Sciter?
Да, здесь два варианта — один htmlayout, другой sciter при клике на кнопку удаляется элемент #content
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, TK, Вы писали:
TK>Здравствуйте, c-smile, Вы писали:
TK>>>Например, почему element.Parent.InnerHtml = "" приводит к вызову BEHAVIOR_DETACH для element, а если заменить на element.DetachElement() нет?
CS>>Ты можешь собрать минимальный пример для Sciter?
TK>Да, здесь два варианта — один htmlayout, другой sciter при клике на кнопку удаляется элемент #content
А что должно происходить?
У меня при запуске возникает
MsgBox ("attached {content}" )
после него окно со sciter. При закрытии оного получаю:
MsgBox ("detached {content}" )
И для htmlayout и для sciter. И на твоей версии sciter/htmlayout и на том что есть у меня.
Здравствуйте, TK, Вы писали:
TK>Здравствуйте, c-smile, Вы писали:
CS>>Что здесь не так?
TK>Надо мышкой на кнопку с картинкой в левом верхнем кликнуть Тогда, для Htmlayout detached будет, а для sciter нет
В каком случае генерируется твой MsgBox("detached")?
Здравствуйте, c-smile, Вы писали:
TK>>Надо мышкой на кнопку с картинкой в левом верхнем кликнуть :) Тогда, для Htmlayout detached будет, а для sciter нет CS>В каком случае генерируется твой MsgBox("detached")?
Это результат уведомления BEHAVIOR_DETACH.
код формы примерно такой:
Здравствуйте, Obukhov, Вы писали:
O>Но есть пара особенностей: O>1. При первоначальной загрузке страницы (хотя select имеет определенный выбранный пункт) у code#INPUT_CODE значение пустое пока не перещелкнешь select. O>2. При перещелкивании select с помощью курсорных клавиш, значение у code#INPUT_CODE меняется на адекватное, но при этом сам select остается неизменным (не перерисовывается).
O>как можно побороть пункт 1 ?
Гляну.
O>по второму щас постараюсь прислать пример.
Да, надо.
Здравствуйте, Obukhov, Вы писали:
O>Здравствуйте, c-smile, Вы писали:
CS>>Чего-то VC optimizer невзлюбил один мой файл...
O>Интересно, а как вы ловили что оптимайзер сломал код ? O>вопрос чисто по обмену опытом
Да в общем тривиально. У меня две release версии с разными установками оптимизации. В одной валится в другой нет.
Пара моих проблем и один достоверный глюк оптимизатора.
Здравствуйте, Obukhov, Вы писали:
O>1. При первоначальной загрузке страницы (хотя select имеет определенный выбранный пункт) у code#INPUT_CODE значение пустое пока не перещелкнешь select.
Здравствуйте, c-smile, Вы писали:
CS>Здравствуйте, Obukhov, Вы писали:
O>>1. При первоначальной загрузке страницы (хотя select имеет определенный выбранный пункт) у code#INPUT_CODE значение пустое пока не перещелкнешь select.
CS>На пока: CS>
Здравствуйте, Obukhov, Вы писали:
O>Здравствуйте, c-smile, Вы писали:
CS>>Здравствуйте, Obukhov, Вы писали:
O>>>1. При первоначальной загрузке страницы (хотя select имеет определенный выбранный пункт) у code#INPUT_CODE значение пустое пока не перещелкнешь select.
CS>>На пока: CS>>
Здравствуйте, Obukhov, Вы писали:
O>Здравствуйте, c-smile, Вы писали:
CS>>Здравствуйте, Obukhov, Вы писали:
O>>>1. При первоначальной загрузке страницы (хотя select имеет определенный выбранный пункт) у code#INPUT_CODE значение пустое пока не перещелкнешь select.
CS>>На пока: CS>>
select#CODE {
assigned! : $1(code#CODE):value = $1c(option[selected]):value; // здесь (при инициализации) берем declared value
value-changed! : $1(code#CODE):value = $1c(option:current):value; // здесь (после value-changed!) берем runtime value
}
CS>Состояние :current у option появляется только тогда когда он был активирован, скажем получил фокус. CS>До этого :current не определен.
CS>Что делать?
CS>Первое, объявить нужную option c атрибутом selected как я сказал в сообщении выше:
CS>
CS>select#CODE {
CS> assigned! : $1(code#CODE):value = $1c(option[selected]):value; // здесь (при инициализации) берем declared value
CS> value-changed! : $1(code#CODE):value = $1c(option:current):value; // здесь (после value-changed!) берем runtime value
CS>}
CS>
А атрибут default подойдет ?
Вроде сделал тоже самое с атрибутом default, нифига не получилось
Потом переделал все на selected — тоже самое
закрались некоторые подозрения...
взял и сделал глобальную CSSS функцию: test_call()
CS>>select#CODE {
CS>> assigned! : $1(code#CODE):value = $1c(option[selected]):value; // здесь (при инициализации) берем declared value
CS>> value-changed! : $1(code#CODE):value = $1c(option:current):value; // здесь (после value-changed!) берем runtime value
CS>>}
CS>>
O>А атрибут default подойдет ?
Нет. См. ссылку в пред. сообщении.
O>Вроде сделал тоже самое с атрибутом default, нифига не получилось
Что именно не получилось?
O>Потом переделал все на selected — тоже самое O>закрались некоторые подозрения... O>взял и сделал глобальную CSSS функцию: test_call()
O>и попробовал сделать вот так: O>
Здравствуйте, c-smile, Вы писали:
CS>Это все работает.
Отличие присланного примера от реальной программы вот в чем:
<select id="CODE" size="1" .requred style="width:100px"><include src="dict:2:1"/></select>
И по HLN_LOAD_DATA, я отдаю реальное содержимое этого combo. Содержимое этого списка генерится из "справочника" лежащего в БД программы.
Здравствуйте, Obukhov, Вы писали:
O>Здравствуйте, c-smile, Вы писали:
CS>>Это все работает.
O>Отличие присланного примера от реальной программы вот в чем: O><select id="CODE" size="1" .requred style="width:100px"><include src="dict:2:1"/></select>
O>И по HLN_LOAD_DATA, я отдаю реальное содержимое этого combo. Содержимое этого списка генерится из "справочника" лежащего в БД программы.
Т.е. selected там нет?
Тогда поменяй на
select#CODE {
assigned! : $1(code#CODE):value = $1c(option):value; // т.е. просто берем первую <option>
value-changed! : $1(code#CODE):value = $1c(option:current):value;
}
Здравствуйте, c-smile, Вы писали:
CS>Здравствуйте, Obukhov, Вы писали:
O>>Здравствуйте, c-smile, Вы писали:
CS>>>Это все работает.
O>>Отличие присланного примера от реальной программы вот в чем: O>><select id="CODE" size="1" .requred style="width:100px"><include src="dict:2:1"/></select>
O>>И по HLN_LOAD_DATA, я отдаю реальное содержимое этого combo. Содержимое этого списка генерится из "справочника" лежащего в БД программы.
CS>Т.е. selected там нет?
CS>Тогда поменяй на
CS>
CS>select#CODE {
CS> assigned! : $1(code#CODE):value = $1c(option):value; // т.е. просто берем первую <option>
CS> value-changed! : $1(code#CODE):value = $1c(option:current):value;
CS>}
CS>
Что удивительно, он там есть в первом пункте как раз (вставляю руками в коде).
Сделал по последнему варианту — заработало.
Спасибо.