tsdima писал(а):
Я предлагаю разделить код элемента на клиентский и серверный. Более того, допускаю, что реализация точки может быть как для клиентского, так и для серверного скрипта (возможно, даже две реализации одновременно), т.е. в зависимости от того, с какой точкой-событием есть связь (клиентской или серверной).Немного подумал - напрашивается примерно такая схема:
Add(MultiElementEx,14481033,399,287)
{
link(onClick,16548331:GetData,[])
}
BEGIN_SDK
Add(EditMultiEx,4781561,3,3)
{
WorkCount=#7:doPrint|
EventCount=#7:onPrint|
DataCount=#7:onClick|
}
END_SDK
Add(EventFromData,16548331,399,224)
{
link(onEvent,13298588:doMessage,[])
}
Add(Message,13298588,462,224)
{
}
Add(PointHint,437416,189,301)
{
Info=#23:Основное тело программы|
Width=162
Height=18
link(Event,14481033:doPrint,[(375,310)(375,293)])
}
предположим тут MultiElementEx это один из компонент-тегов с добавленным событием onClick в виде data-точки. EventFromData - это ключевой элемент, после которого идут компоненты так называемой клиентской части. Он умеет правильно вставлять код клиента в страницу и в качестве результата возвращает например имя ф-ции. Message - это один из элементов палитры для вывода сообщения.
Коды элементов в такой трактовке могут быть примерно такими:
MultiElementEx:
func doPrint
print('echo ', "<a onclick='return " & onclick & "';>")
event(onPrint)
end
EventFromData
func GetData
print("?>")
setLanguage("java")
print("<script>")
print("function func" & _id_ & "() {")
event(onEvent)
print("}")
print("</script>")
print("<?php")
setLanguage("php")
return("func" & _id_ & "()")
end
Message:
func doMessage
if( langIs("java") ) // реализуем клиентский код элемента
print('alert(', Message, ');')
elseif( langIs("php") ) // реализуем серверный код элемента
print('echo ', Message, ';')
end
event(onMessage)
end