powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Динамическое добавление SVG на страницу
1 сообщений из 1, страница 1 из 1
Динамическое добавление SVG на страницу
    #36170223
sutni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть задача:
на уже сформированной и загруженной ZEN странице отобразить SVG компонент (графики), содержимое которого зависит от данных на странице. Например, в страницу выгрузились некие данные, пользователь вбил ещё что-то в поля ввода, нажал кнопку и построился один или несколько графиков. Причём вид (lineChart,barChart,pieChart и др) и содержимое графиков зависят от данных на странице.
Когда на странице статически описываешь SVG компонент проблем нет. Но с динамическим добавлением SVG компонента возникают проблемы. Делаю так:
1. есть страница Class QuaSyCoreApp.QuaSyCore.WebTemplate.Report Extends %ZEN.Component.page
для неё описываю контент:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<page xmlns="http://www.intersystems.com/zen" 
xmlns:QuaSyCore="http://www.intersystems.com/QuaSyCore" 
import="QuaSyCoreApp.QuaSyCore.Components.SVGGraphs,%ZEN.SVGComponent.svgFrame,%ZEN.SVGComponent.barChart"
title="">
      <html id="TopContent" OnDrawContent="GetHTMLTop" valign="top"/>
      <QuaSyCore:RepDataPane id="DataId" hidden="false"/>
      <html id="TopBottom" OnDrawContent="GetHTMLBottom" valign="bottom" />
</page>
}

2. есть компонент Class QuaSyCoreApp.QuaSyCore.Components.RepDataPane Extends %ZEN.Component.composite
для него описываю контент:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<composite xmlns="http://www.intersystems.com/zen" 
xmlns:QuaSyCore="http://www.intersystems.com/QuaSyCore">
         <html id="DataContent" align="center">
                 ...
         </html>
         <QuaSyCore:SVGGraphs id="SVGGraphsId" hidden="true"/>
</composite>
}

3. есть компонент Class QuaSyCoreApp.QuaSyCore.Components.SVGGraphs Extends %ZEN.Component.composite
для него описываю контент:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<composite xmlns="http://www.intersystems.com/zen" 
import="%ZEN.SVGComponent.svgFrame,%ZEN.SVGComponent.barChart">
    <pane id="SVGPaneId">
    </pane>
</composite>
}

и такой код, который и должен динамически отображать графики:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Method Build(data As %ZEN.Datatype.string) As %Status
{
	//&js<alert("#(data)#");>
	
	set svgPane = %this.%GetChildById("SVGPaneId")
	
	Set svgFrame = ##class(%ZEN.SVGComponent.svgFrame).%New()
		Set svgFrame.id = "SVGFrameId"
		Set svgFrame.height = "400"
		Set svgFrame.width = "600"
		Set svgFrame.align = "center"
	
	Set svgChart = ##class(%ZEN.SVGComponent.barChart).%New()
	Set svgChart.id = "SVGChartId"
	Set svgChart.height = "400"
	Set svgChart.width = "600"
	Set svgChart.title = "Визуализация"
	Set svgChart.backgroundStyle = "fill: url(#glow-blue);"
	Set svgChart.ongetData = "return zenPage.getChartData(series);"
	Do svgFrame.%AddChild(svgChart)
	
	//Do svgPane .%AddChild(svgFrame)
}

Однако при выполнении происходит следующая ошибка:
ZEN ERROR :
createComponentNS: Unable to find component :
--------------
barChart.
То есть среда исполнения не находит ZEN компонента и не может его добавить.

Как это можно побороть?
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Динамическое добавление SVG на страницу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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