<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Properties panel basics - Qlik Sense - Обучение, учебник, онлайн курс</title>
	<atom:link href="https://qliksense.ivan-shamaev.ru/tag/properties-panel-basics/feed/" rel="self" type="application/rss+xml" />
	<link>https://qliksense.ivan-shamaev.ru/tag/properties-panel-basics/</link>
	<description>Qlik Sense на русском языке. Пошаговые уроки для изучения Клик Сенс</description>
	<lastBuildDate>Mon, 08 Mar 2021 20:27:25 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.1</generator>

<image>
	<url>https://qliksense.ivan-shamaev.ru/wp-content/uploads/2018/07/QlikSense_ICON2-150x150.png</url>
	<title>Properties panel basics - Qlik Sense - Обучение, учебник, онлайн курс</title>
	<link>https://qliksense.ivan-shamaev.ru/tag/properties-panel-basics/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Панель свойств расширения или Properties Panel</title>
		<link>https://qliksense.ivan-shamaev.ru/properties-panel-basics-qlik-extension/</link>
					<comments>https://qliksense.ivan-shamaev.ru/properties-panel-basics-qlik-extension/#respond</comments>
		
		<dc:creator><![CDATA[qliksense-expert]]></dc:creator>
		<pubDate>Fri, 12 Feb 2021 20:27:45 +0000</pubDate>
				<category><![CDATA[Уровень 2]]></category>
		<category><![CDATA[Building a properties panel]]></category>
		<category><![CDATA[Building visualization extensions]]></category>
		<category><![CDATA[custom properties]]></category>
		<category><![CDATA[extension custom properties]]></category>
		<category><![CDATA[Properties panel basics]]></category>
		<category><![CDATA[Qlik Sense Extension]]></category>
		<category><![CDATA[Qlik Sense Extensions]]></category>
		<category><![CDATA[Reusable Properties]]></category>
		<category><![CDATA[как задать свойства расширения]]></category>
		<category><![CDATA[Настраиваемые свойства Extension]]></category>
		<guid isPermaLink="false">https://qliksense.ivan-shamaev.ru/?p=2580</guid>

					<description><![CDATA[<p>Создание панели свойств Qlik Sense Extension Введение в свойства расширения. Что такое панель свойств? Перед тем, как перейти к разработке Qlik Sense Visualization Extensions, необходимо понять основные принципы определения и использования свойств в Qlik Sense расширениях. Основная идея свойств состоит в том, чтобы предложить пользователям способ настройки поведения расширений визуализации таким же<a class="moretag" href="https://qliksense.ivan-shamaev.ru/properties-panel-basics-qlik-extension/"> Читать дальше&#8230;</a></p>
<p>Сообщение <a href="https://qliksense.ivan-shamaev.ru/properties-panel-basics-qlik-extension/">Панель свойств расширения или Properties Panel</a> появились сначала на <a href="https://qliksense.ivan-shamaev.ru">Qlik Sense - Обучение, учебник, онлайн курс</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Создание панели свойств Qlik Sense Extension</h1>
<h2>Введение в свойства расширения. Что такое панель свойств?</h2>
<p>Перед тем, как перейти к разработке Qlik Sense Visualization Extensions, необходимо понять основные принципы определения и использования свойств в Qlik Sense расширениях.</p>
<p><span>Основная идея свойств состоит в том, чтобы предложить пользователям способ настройки поведения </span><em><span>расширений визуализации</span></em><span> таким же образом, как они будут управлять собственными объектами Qlik Sense. Поэтому разработчик расширения может использовать программный интерфейс для определения свойств, которые затем отображаются на правой панели свойств.</span></p>
<h2>Определение панели свойств</h2>
<p><span>Свойства структурированы иерархически (есть еще такой термин, как аккордеон панели свойств):</span></p>
<p><a href="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2021/02/Qlik_Sense_Extension_Panel_Properties_Customization_Developing.png"><img fetchpriority="high" decoding="async" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2021/02/Qlik_Sense_Extension_Panel_Properties_Customization_Developing.png" alt="" width="242" height="481" class="aligncenter size-full wp-image-2583" srcset="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2021/02/Qlik_Sense_Extension_Panel_Properties_Customization_Developing.png 242w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2021/02/Qlik_Sense_Extension_Panel_Properties_Customization_Developing-151x300.png 151w" sizes="(max-width: 242px) 100vw, 242px" /></a></p>
<p>A &#8211; Sections<br />
B &#8211; Header<br />
C &#8211; Items</p>
<p>Есть еще одна иллюстрация (с сайта <strong><a href="http://qliksite.io/tutorials/qliksense-visualization-extensions/part-01/06-Introduction-to-Using-Properties/" target="_blank" rel="noopener">http://qliksite.io/tutorials/qliksense-visualization-extensions/part-01/06-Introduction-to-Using-Properties/</a></strong>):</p>
<p><a href="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2021/02/Qlik_Sense_Extension_Development_Accordion_Concept.png"><img decoding="async" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2021/02/Qlik_Sense_Extension_Development_Accordion_Concept.png" alt="" width="582" height="466" class="aligncenter size-full wp-image-2584" srcset="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2021/02/Qlik_Sense_Extension_Development_Accordion_Concept.png 582w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2021/02/Qlik_Sense_Extension_Development_Accordion_Concept-300x240.png 300w" sizes="(max-width: 582px) 100vw, 582px" /></a></p>
<p><strong>Accordion</strong><span></span></p>
<ul>
<li>Accordion<span> </span><strong>sections</strong>
<ul>
<li>Section<span> </span><strong>headers</strong>
<ul>
<li>Property<span> </span><strong>items</strong></li>
</ul>
</li>
</ul>
</li>
</ul>
<p><span>Свойства добавляются путем их </span><span class="syntax"><span>определения в</span></span><span> свойстве <code>definition</code> в файле JavaScript. </span></p>
<p><strong>Есть два способа определения свойств:</strong></p>
<ul>
<li><span>Повторное использование существующих встроенных свойств (</span>Reusing existing, built-in, properties)</li>
<li><span>Создать настраиваемые свойства (custom properties)</span></li>
</ul>
<p><strong>Reusable Properties:</strong></p>
<ul>
<li>Dimensions</li>
<li>Measures</li>
<li>Sorting</li>
<li>Appearance</li>
<li>Add-Ons</li>
</ul>
<h3><madcap:concept term="Building visualization extensions" xmlns:madcap="http://www.madcapsoftware.com/Schemas/MadCap.xsd"><span>Повторное использование существующих свойств</span></madcap:concept></h3>
<p><span>Вот некоторые типичные свойства, используемые для наиболее распространенных встроенных визуализаций </span><span class="CommonComponentsQlik Sense"><span>Qlik Sense</span></span><span>:</span></p>
<ul>
<li><span>Все собственные визуализации имеют раздел </span><span class="ui_item"><span>Внешний вид</span></span><span> с заголовком раздела </span><span class="ui_item"><span>Общие</span></span><span> .</span></li>
<li><span>Большинство встроенных визуализаций позволяют определять </span><span class="ui_item"><span>измерения</span></span><span> и </span><span class="ui_item"><span>меры</span></span><span> .</span></li>
</ul>
<h4 id="anchor-1" tabindex="-1"><span>Определение свойств</span></h4>
<p><span>Если вы создаете расширение визуализации без defining a properties panel, </span><span class="CommonComponentsQlik Sense"><span>Qlik Sense</span></span><span> по умолчанию будет включать раздел <strong>&#8220;</strong></span><strong><span class="ui_item">Внешний вид</span></strong><span><strong>&#8220;</strong> или <strong>&#8220;<span class="ui_item">Appearance</span> section&#8221;</strong>.</span></p>
<p><span>Тот же результат будет достигнут при повторном использовании раздела </span><span class="syntax"><span>настроек</span></span><span>, который является внутренним именем раздела Внешний вид.</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">define( [
        'jquery'
    ],
    function ( $ ) {
        'use strict';

        return {

            // Define what the properties panel looks like
            definition: {
                type: "items",
                component: "accordion",
                items: {
                    appearance: {
                        uses: "settings",
                    }
                }
            },
            // Paint/Rendering logic
            paint: function ( $element /*, layout*/ ) {

                $element.empty();
                var $msg = $( document.createElement( 'div' ) );
                $msg.html( 'Just demonstrating default behavior of the property panel"' );
                $element.append( $msg );

            }
        };

    } );</pre>
<p><span>На основе приведенного выше кода вы теперь можете расширить <code><span class="syntax">definition</span></code> </span><span>для повторного использования других встроенных разделов. В этом примере мы также повторно будем использовать разделы измерений, мер и сортировки.</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">// Define what the properties panel looks like
definition: {
    type: "items",
    component: "accordion",
    items: {
        dimensions: {
            uses: "dimensions"
        },
        measures: {
            uses: "measures"
        },
        sorting: {
            uses: "sorting"
        },
        appearance: {
            uses: "settings",
        }
    }
},</pre>
<p>В результате мы получим следующую панель свойств:</p>
<p><a href="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2021/02/Qlik_Sense_Custom_Properties_result_of_javascript.jpg"><img decoding="async" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2021/02/Qlik_Sense_Custom_Properties_result_of_javascript.jpg" alt="" width="324" height="368" class="aligncenter size-full wp-image-2585" srcset="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2021/02/Qlik_Sense_Custom_Properties_result_of_javascript.jpg 324w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2021/02/Qlik_Sense_Custom_Properties_result_of_javascript-264x300.jpg 264w" sizes="(max-width: 324px) 100vw, 324px" /></a></p>
<h4 id="anchor-2" tabindex="-1"><span>Ссылка на свойства</span></h4>
<p><span>Параметр макета (layout) передается в метод paint, и он включает текущую область расширения визуализации вместе с определенными свойствами.</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">// Paint/Rendering logic
paint: function ( $element, layout ) {

    console.info('paint &gt;&gt; layout &gt;&gt; ', layout);

}</pre>
<p><span>Если вы посмотрите на вывод консоли, например, в Chrome DevTools, вы найдете то, что ищете.</span></p>
<p><a href="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2021/02/chrome_devtools_properties_console_log_print.png"><img loading="lazy" decoding="async" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2021/02/chrome_devtools_properties_console_log_print.png" alt="" width="953" height="253" class="aligncenter size-full wp-image-2586" srcset="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2021/02/chrome_devtools_properties_console_log_print.png 953w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2021/02/chrome_devtools_properties_console_log_print-300x80.png 300w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2021/02/chrome_devtools_properties_console_log_print-768x204.png 768w" sizes="(max-width: 953px) 100vw, 953px" /></a></p>
<p><span>С этой информацией теперь вы можете начать выводить некоторые значения в метод <code>paint</code></span><span>.</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">// Paint/Rendering logic
paint: function ( $element, layout ) {

    //output values from the property panel
    $element.empty();
    
    //output container
    var $msg = $( document.createElement( 'div' ) );
    
    //variable holding the output
    var html = '&lt;b&gt;Property values:&lt;/b&gt;&lt;br/&gt;';
    html += 'Title: ' + layout.title + '&lt;br/&gt;';
    html += 'Subtitle: ' + layout.subtitle + '&lt;br/&gt;';
    
    //assign the variable to the output container
    $msg.html( html );
    
    //add the output container to the current element
    $element.append( $msg );

}</pre>
<p>Получим следующий результат:</p>
<p><a href="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2021/02/Qlik_Sense_Custom_Properties_result_of_javascript_example2.jpg"><img loading="lazy" decoding="async" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2021/02/Qlik_Sense_Custom_Properties_result_of_javascript_example2.jpg" alt="" width="549" height="495" class="aligncenter size-full wp-image-2587" srcset="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2021/02/Qlik_Sense_Custom_Properties_result_of_javascript_example2.jpg 549w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2021/02/Qlik_Sense_Custom_Properties_result_of_javascript_example2-300x270.jpg 300w" sizes="(max-width: 549px) 100vw, 549px" /></a></p>
<h3 id="anchor-3" tabindex="-1"><span>Собственные свойства, которые можно использовать повторно</span></h3>
<p><span>В этом разделе перечислены собственные свойства </span><span class="CommonComponentsQlik Sense"><span>Qlik Sense,</span></span><span> которые можно повторно использовать в определении панели свойств.</span></p>
<h4>Dimensions</h4>
<p><span>Когда вы повторно используете раздел</span> Dimensions section, <span>он включает в себя следующее</span>:</p>
<ul>
<li>Add dimension</li>
</ul>
<p><span>После добавления измерения у вас есть следующие свойства по умолчанию</span>:</p>
<ul>
<li>Field</li>
<li>Label</li>
<li>Show null values</li>
<li>Limitation</li>
<li>Show others</li>
<li>Others label</li>
</ul>
<p><strong>Пример: Add Dimensions section</strong></p>
<p><span>В приведенном ниже примере показано, как добавить раздел &#8220;<strong>Dimensions</strong>&#8221; на панель свойств вашего расширения визуализации. </span><span>Обратите внимание, что определено, что расширение визуализации должно иметь ровно одно измерение.</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">define( [], function ( ) {
    
    return {
        type: "items",
        component: "accordion",
        items: {
            dimensions: {
                uses: "dimensions",
                min: 1,
                max: 1
            }
        }
    };
 
});</pre>
<h4>Measures</h4>
<p><span>Когда вы повторно используете раздел &#8220;Меры&#8221;, он включает в себя следующее</span>:</p>
<ul>
<li>Add measure</li>
</ul>
<p><span>Когда вы добавили меру, у вас появятся следующие свойства по умолчанию</span>:</p>
<ul>
<li>Label</li>
<li>Expression</li>
<li>Number formatting</li>
</ul>
<p class="example" data-mc-autonum="Example: " data-mc-conditions=""><strong><span class="autonumber">Пример: </span>Add Measures section</strong></p>
<p data-mc-conditions=""><span>В этом примере показано, как мы теперь добавили определение раздела «Меры» на панель свойств нашего расширения визуализации. </span><span>Обратите внимание, что здесь мы также определяем, что расширение визуализации должно иметь ровно одну меру.</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">define( [], function ( ) {
    
    return {
        type: "items",
        component: "accordion",
        items: {
            dimensions: {
                uses: "dimensions",
                min: 1,
                max: 1
            },
            measures: {
                uses: "measures",
                min: 1,
                max: 1
            }
        }
    };
 
});</pre>
<h4>Sorting</h4>
<p><span>Когда вы повторно используете раздел сортировки, он включает в себя следующее</span>:</p>
<ul>
<li>Labels of the dimension and measure<span>, используемые в расширении визуализации</span></li>
<li>Sorting option (Auto or Custom)<span>Опция Custom включает в себя следующее:</span>
<ul>
<li>Sort by expression (only available for dimensions)</li>
<li>Sort numerically</li>
<li>Sort alphabetically</li>
<li>Sort by frequency (only available for filter panes)</li>
</ul>
</li>
</ul>
<p class="example" data-mc-autonum="Example: " data-mc-conditions=""><strong><span class="autonumber">Пример: </span>Add Sorting section</strong></p>
<p data-mc-conditions=""><span>В этом примере показано, как мы теперь добавили определение раздела «Сортировка» на панель свойств вашего расширения визуализации. Мы не вносили никаких изменений в раздел «Сортировка», предварительно определенный </span><span class="CommonComponentsQlik Sense"><span>Qlik Sense</span></span><span>.</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">define( [], function ( ) {
    
    return {
        type: "items",
        component: "accordion",
        items: {
            dimensions: {
                uses: "dimensions",
                min: 1,
                max: 1
            },
            measures: {
                uses: "measures",
                min: 1,
                max: 1
            },
            sorting: {
                uses: "sorting"
            }
        }
    };
 
});</pre>
<h4>Add-ons (Надстройки)</h4>
<p><span>Когда вы повторно используете раздел надстроек (Add-ons), он включает в себя следующее:</span></p>
<ul>
<li>Data handling</li>
<li>Reference lines</li>
</ul>
<p class="example" data-mc-autonum="Example: " data-mc-conditions=""><strong><span class="autonumber">Пример: </span>Add Add-ons section</strong></p>
<p data-mc-conditions=""><span>В этом примере показано, как мы добавляем определение раздела «Надстройки» на панель свойств вашего расширения визуализации. Мы не вносили никаких изменений в раздел «Надстройки», предварительно определенный </span><span class="CommonComponentsQlik Sense"><span>Qlik Sense</span></span><span>.</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">define( [], function ( ) {
    
    return {
        type: "items",
        component: "accordion",
        items: {
            dimensions: {
                uses: "dimensions",
                min: 1,
                max: 1
            },
            measures: {
                uses: "measures",
                min: 1,
                max: 1
            },
            sorting: {
                uses: "sorting"
            },
            addons: {
                uses: "addons"
            }
        }
    };
 
});</pre>
<h4>Appearance (<span class="syntax">settings</span>) &#8211; <span>Внешний вид</span></h4>
<blockquote><p><span>Appearance section называется </span><code><span class="syntax">settings</span></code><span> в коде.</span></p></blockquote>
<p><span>Когда вы повторно используете раздел «Внешний вид», он включает в себя следующее:</span></p>
<ul>
<li>General &#8211; <span>Общий</span><span>Включает настройки для заголовка, подзаголовка и сноски</span></li>
<li>Presentation &#8211; <span>Презентация</span> (<span>доступна только для визуализаций с более чем одним измерением</span>)</li>
<li>Colors and legend &#8211; <span>Цвета и легенда</span> (<span>доступно только в некоторых типах визуализаций</span>)</li>
<li>X-axis &#8211; <span>Ось X</span> (<span>доступна только в некоторых типах визуализаций</span>)</li>
<li>Y-axis &#8211; <span>Ось Y</span> (<span>доступна только в некоторых типах визуализаций</span>)</li>
</ul>
<p class="example" data-mc-autonum="Example: " data-mc-conditions=""><strong><span class="autonumber">Пример: </span>Add Appearance section</strong></p>
<p data-mc-conditions=""><span class="CommonComponentsQlik Sense"><span>В этом примере показано, как мы добавляем определение раздела «Внешний вид» на панель свойств вашего расширения визуализации. Мы не вносили никаких изменений в раздел «Надстройки», предварительно определенный </span><span>Qlik Sense</span><span>.</span></span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">define( [], function ( ) {
    
    return {
        type: "items",
        component: "accordion",
        items: {
            dimensions: {
                uses: "dimensions",
                min: 1,
                max: 1
            },
            measures: {
                uses: "measures",
                min: 1,
                max: 1
            },
            sorting: {
                uses: "sorting"
            },
            addons: {
                uses: "addons"
            },
            settings: {
                uses: "settings"
            }
        }
    };
 
});</pre>
<h3><strong>Добавление дополнительных свойств (</strong><madcap:concept term="Building visualization extensions" xmlns:madcap="http://www.madcapsoftware.com/Schemas/MadCap.xsd">custom properties)</madcap:concept></h3>
<p><span>Вы можете задать <strong>custom properties</strong> для <strong>visualization extension</strong>. </span><span style="color: #339966;"><strong><span class="CommonComponentsQlik Sense">Qlik Sense</span></strong></span><span> автоматически добавляет их на панель свойств и заботится о сохранении. Затем вы найдете выбранные значения в параметре <code>layout</code>.</span></p>
<p><span>Для каждого свойства вы задаете объект JavaScript с разными полями в зависимости от того, какой тип настраиваемого свойства вы определяете.</span></p>
<p><span>Следующие компоненты пользовательского интерфейса могут использоваться для отображения ваших custom properties на панели свойств:</span></p>
<ul>
<li><strong>Button</strong> &#8211; Кнопка</li>
<li><strong>Button group</strong> &#8211; Группа кнопок</li>
<li><strong>Check box</strong> &#8211; Флажок</li>
<li><strong>Color-picker</strong> &#8211; выбор цвета</li>
<li><strong>Drop down list</strong> &#8211; Выпадающий список</li>
<li><strong>Input box / text box</strong> &#8211; <span><span>Поле ввода / текстовое поле</span></span></li>
<li><strong>Link</strong> &#8211; Ссылка</li>
<li><strong>Media</strong></li>
<li><strong>Radio button</strong> &#8211; Переключатель</li>
<li><strong>Range slider</strong> &#8211; Ползунок для выбора диапазона</li>
<li><strong>Slider</strong></li>
<li><strong>Switch</strong> &#8211; Переключатель</li>
<li><strong>Text</strong> &#8211; Текст</li>
<li><strong>Text area</strong> &#8211; Текстовая область</li>
</ul>
<p><span>Их можно сгруппировать в разделы и заголовки на панели свойств. </span><span>Каждый из них предоставляет различные параметры конфигурации для управления их поведением.</span></p>
<h4><strong>Совет: Как улучшить управляемость скриптом Javascript при разработке Extension?</strong></h4>
<p><span>Если у вас есть много разных свойств, определенных в основном файле JavaScript, вы скоро поймете, что размер файла js может стать довольно большим, и его будет трудно читать и поддерживать. Для облегчения работы с js есть разные подходы:</span></p>
<ul>
<li><span>Разделите раздел <code>definition</code> на несколько переменных JavaScript.</span></li>
<li><span>Создайте отдельный файл JavaScript для определения ваших свойств и загрузите этот файл в основной файл сценария расширения визуализации.</span></li>
</ul>
<h5><span>Определение свойств в отдельном файле JavaScript</span></h5>
<p><span>В этом разделе показано, как определить ваши свойства в отдельном файле JavaScript. </span><span>Мы начинаем со следующего кода, определенного в вашем основном файле сценария.</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">define( [
        'jquery'
    ],
    function ( $ ) {
        'use strict';

        return {

            // Define what the properties panel looks like
            definition: {
                type: "items",
                component: "accordion",
                items: {
                    dimensions: {
                        uses: "dimensions"
                    },
                    measures: {
                        uses: "measures"
                    },
                    appearance: {
                        uses: "settings",
                    }
                }
            },
            // Paint/Rendering logic
            paint: function ( $element, layout ) {
            // Main rendering logic goes here
            }
        };
    } );</pre>
<p><span>Создайте файл и назовите его <strong>properties.js</strong>. </span><span>Сохраните его в той же папке, где находятся ваши основные файлы расширения визуализации. </span><span>Новый файл <strong>properties.js</strong> должен выглядеть так:</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">define( [], function () {
    'use strict';
    // *****************************************************************************
    // Dimensions &amp; Measures
    // *****************************************************************************
    var dimensions = {
        uses: "dimensions",
        min: 0,
        max: 1
    };
    var measures = {
        uses: "measures",
        min: 0,
        max: 1
    };
    // *****************************************************************************
    // Appearance section
    // *****************************************************************************
    var appearanceSection = {
        uses: "settings"
    };
    // *****************************************************************************
    // Main properties panel definition
    // Only what is defined here is returned from properties.js
    // *****************************************************************************
    return {
        type: "items",
        component: "accordion",
        items: {
            dimensions: dimensions,
            measures: measures,
            appearance: appearanceSection
        }
    };
});</pre>
<p><span>Затем вам нужно загрузить внешнее определение свойств в ваш основной файл сценария и назначить <code>definition</code></span><span>.</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">define( [
        // Load properties.js using requireJS
        // Note: if you load .js files, omit the file extension
        // otherwise requireJS will not load it correctly
        './properties'
    ],
    function ( props ) {
        'use strict';
        return {
            definition: props,
            // Paint/Rendering logic
            paint: function ( $element, layout ) {
            // Main rendering logic goes here
            }
        };
    } );</pre>
<h4>Добавление basic custom property</h4>
<p><span>В этом разделе мы определим самый простой, но один из наиболее распространенных компонентов &#8211; текстовое поле.</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">// Text box definition
var myTextBox = {
    ref: "props.myTextBox",
    label: "My text box",
    type: "string"
};</pre>
<p><span>В определении всех компонентов пользовательского интерфейса есть общие свойства, которые можно установить.</span></p>
<p><code><span class="syntax">type</span></code></p>
<p><span>Используется для всех определений типов настраиваемых свойств. Может быть </span><code><span class="API_syntax_input">string</span></code>,<span> </span><code><span class="API_syntax_input">integer</span></code>,<span> </span><code><span class="API_syntax_input">number</span></code><span> или</span><span> </span><code><span class="API_syntax_input">boolean</span></code>.</p>
<p><code><span class="syntax">ref</span></code></p>
<p><span>Имя или идентификатор, используемый для ссылки на свойство.</span></p>
<p><code><span class="syntax">label</span></code></p>
<p><span>Используется для определения метки, отображаемой на панели свойств.</span></p>
<p><code><span class="syntax">component</span></code></p>
<p><span>Используется для определения того, как свойство отображается на панели свойств.</span></p>
<div class="note"></div>
<blockquote><p><span>В приведенном выше примере <code><span class="syntax">component</span></code> </span><span>не определен. </span><span class="CommonComponentsQlik Sense"><span>Qlik Sense </span></span><span>автоматически по умолчанию использует текстовое поле, если <code><span class="syntax">component</span></code> </span><span>не определен для элементов, <code><span class="syntax">type</span></code> </span><span class="syntax"><span>которых </span></span><span>является <code><span class="API_syntax_input">string</span></code> </span><span>или <code><span class="API_syntax_input">integer</span></code></span><span>.</span></p></blockquote>
<h4 id="anchor-3" tabindex="-1"><span>Добавление определения компонента на панель свойств</span></h4>
<p><span>В этом разделе мы добавим вновь созданное текстовое поле на основе строки в раздел Внешний вид.</span></p>
<p><strong>Перед:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">// Appearance section
var appearanceSection = {
    uses: "settings"
};
// Main properties panel definition
// Only what is defined here is returned from properties.js
return {
    type: "items",
    component: "accordion",
    items: {
        appearance: appearanceSection
    }
};</pre>
<p><strong>После:</strong></p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">var myTextBox = {
    ref: "props.myTextBox",
    label: "My text box",
    type: "string"
};

// Appearance section
var appearanceSection = {
    uses: "settings",
    items: {
        myTextBox: myTextBox
    }
};

// Main properties panel definition
// Only what is defined here is returned from properties.js
return {
    type: "items",
    component: "accordion",
    items: {
        appearance: appearanceSection
    }
};</pre>
<p><strong>Результат:</strong></p>
<p><a href="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2021/02/Adding_component_definition_to_properties_panel.png"><img loading="lazy" decoding="async" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2021/02/Adding_component_definition_to_properties_panel.png" alt="" width="230" height="208" class="aligncenter size-full wp-image-2592" /></a></p>
<h4 id="anchor-4" tabindex="-1"><span>Добавление собственного заголовка раздела</span></h4>
<p><span>В предыдущем примере вы добавили текстовое поле в новый раздел. В заголовке раздела автоматически повторно использовалась метка компонента. В этом разделе вы добавите собственный заголовок раздела. Для этого вы создаете новый заголовок ( </span><code><span class="syntax"><span>myNewHeader</span></span></code><span> в примере ниже) в существующем разделе «Внешний вид», а затем добавляете туда элементы:</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">var appearanceSection = {
    uses: "settings",
    items: {
        // Definition of the custom section header
        myNewHeader: {
            type: "items",
            label: "My header, containing text box",
            items: {
                myTextBox: myTextBox
            }
        }
    }
};

// NOTHING CHANGED HERE ...
// Return overall definition of the property accordion
return {
    type: "items",
    component: "accordion",
    items: {
        appearance: appearanceSection
    }
};</pre>
<p><strong>Результат:</strong></p>
<p><a href="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2021/02/Adding_component_definition_to_properties_panel_2.png"><img loading="lazy" decoding="async" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2021/02/Adding_component_definition_to_properties_panel_2.png" alt="" width="230" height="205" class="aligncenter size-full wp-image-2593" /></a></p>
<h4 id="anchor-5" tabindex="-1"><span>Добавление настраиваемого раздела</span></h4>
<p><span>Вы также можете создавать совершенно новые разделы аккордеона.</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">// Some components
var header1_item1 = {
    ref: "props.section1.item1",
    label: "Section 1 / Item 1",
    type: "string",
    expression: "optional"
};

...
...

// Define a custom section
myCustomSection = {
    // not necessary to define the type, component "expandable-items" will automatically
    // default to "items"
    // type: "items"
    component: "expandable-items",
    label: "My Accordion Section",
    items: {
        header1: {
            type: "items",
            label: "Header 1",
            items: {
                header1_item1: header1_item1,
                header1_item2: header1_item2
            }
        },
        header2: {
            type: "items",
            label: "Header 2",
            items: {
                header2_item1: header2_item1,
                header2_item2: header2_item2
            }
        }

    }
}</pre>
<p><span>Ключ в приведенном выше коде заключается в том, что вы добавляете <code>expandable-items</code></span><span> компонента . Остальной код работает как в предыдущих примерах.</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">return {
    type: "items",
    component: "accordion",
    items: {
        appearance: appearanceSection,
        customSection: myCustomSection
    	 }
    };
});</pre>
<p><strong>Результат:</strong></p>
<p><a href="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2021/02/qlik_sense_extension_development_tutorial_custom_section.png"><img loading="lazy" decoding="async" src="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2021/02/qlik_sense_extension_development_tutorial_custom_section.png" alt="" width="248" height="505" class="aligncenter size-full wp-image-2595" srcset="https://qliksense.ivan-shamaev.ru/wp-content/uploads/2021/02/qlik_sense_extension_development_tutorial_custom_section.png 248w, https://qliksense.ivan-shamaev.ru/wp-content/uploads/2021/02/qlik_sense_extension_development_tutorial_custom_section-147x300.png 147w" sizes="(max-width: 248px) 100vw, 248px" /></a></p>
<h3 id="anchor-6" tabindex="-1"><span>Отображение и сохранение custom (настраиваемых) свойств</span></h3>
<p><span>После того как вы определили </span><strong>custom properties</strong><span>, </span><span class="CommonComponentsQlik Sense"><span>Qlik Sense</span></span><span> позаботится обо всем остальном, а именно:</span></p>
<ul>
<li><span>Отображение <strong>custom properties</strong> вместе со встроенными свойствами</span></li>
<li><span>Сохранение значений свойств. Если значение свойства изменяется, вам не нужно заботиться о сохранении, то есть о сохранении и загрузке значения свойства.</span></li>
</ul>
<h3 id="anchor-7" tabindex="-1"><span>Ссылка на значения настраиваемых свойств</span></h3>
<p><span>Ссылка на значения <strong>custom properties</strong> аналогична ссылке на значения из встроенных свойств, но с одним исключением. Используя </span><code><span class="syntax"><span>ref</span></span></code><span>, вы можете определить, как значения свойств отображаются в дереве объектов. Этот принцип применяется ко всем элементам настраиваемых свойств.</span></p>
<p class="examples" data-mc-autonum="Examples: "><strong><span class="autonumber">Примеры:</span></strong></p>
<p data-mc-autonum="Examples: "><span>Определяем текстовое поле:</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">var myTextBox = {
    ref: "myTextBox",
    ...
};</pre>
<p data-mc-autonum="Examples: "><span>На это значение можно ссылаться в вашем скрипте:</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">console.log( layout.myTextBox );</pre>
<p data-mc-autonum="Examples: "><span>В то время как:</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">var myTextBox = {
    ref: "prop.myTextBox",
    ...
};</pre>
<p data-mc-autonum="Examples: "><span>Будет вызываться с использованием:</span></p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">console.log( layout.prop.myTextBox );</pre>
<blockquote>
<p data-mc-autonum="Examples: "><span>Добавление префиксов к вашим свойствам, как показано в последних примерах выше, позволяет легко перебирать все настраиваемые свойства. Это также гарантирует отсутствие конфликтов именования стандартных объектов </span><strong><span class="CommonComponentsQlik Sense">Qlik Sense</span></strong><span>.</span></p>
</blockquote>
<h2>Определение настраиваемых свойств</h2>
<h3>Custom string properties</h3>
<p>todo</p>
<h3>Custom integer properties</h3>
<p>todo</p>
<h3>Custom number properties</h3>
<p>todo</p>
<h3>Custom array properties</h3>
<p>todo</p>
<h3>Custom button properties</h3>
<p>todo</p>
<h3>Custom button group properties</h3>
<p>todo</p>
<h3>Custom check box properties</h3>
<p>todo</p>
<h3>Custom color-picker properties</h3>
<p>todo</p>
<h3>Custom drop down list properties</h3>
<p>todo</p>
<h3>Custom link properties</h3>
<p>todo</p>
<h3>Custom media properties</h3>
<p>todo</p>
<h3>Custom radio button properties</h3>
<p>todo</p>
<h3>Custom slider properties</h3>
<p>todo</p>
<h3>Custom range-slider properties</h3>
<p>todo</p>
<h3>Custom switch properties</h3>
<p>todo</p>
<h3>Custom text properties</h3>
<p>todo</p>
<h3>Custom textarea properties</h3>
<p>todo</p>
<p>Сообщение <a href="https://qliksense.ivan-shamaev.ru/properties-panel-basics-qlik-extension/">Панель свойств расширения или Properties Panel</a> появились сначала на <a href="https://qliksense.ivan-shamaev.ru">Qlik Sense - Обучение, учебник, онлайн курс</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://qliksense.ivan-shamaev.ru/properties-panel-basics-qlik-extension/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
