tmagic-editor/docs/assets/runtime-api_data-source_utils.md.DeJn6r5b.js
2026-02-02 11:13:56 +00:00

31 lines
18 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import{ax as s,z as a,A as l,b2 as t}from"./chunks/framework.DkLJC2NO.js";const c=JSON.parse('{"title":"工具函数","description":"","frontmatter":{},"headers":[],"relativePath":"runtime-api/data-source/utils.md","filePath":"runtime-api/data-source/utils.md"}'),e={name:"runtime-api/data-source/utils.md"};function n(p,i,h,o,d,r){return l(),a("div",null,[...i[0]||(i[0]=[t(`<h1 id="工具函数" tabindex="-1">工具函数 <a class="header-anchor" href="#工具函数" aria-label="Permalink to &quot;工具函数&quot;"></a></h1><p><code>@tmagic/data-source</code> 导出的工具函数。</p><h2 id="createdatasourcemanager" tabindex="-1">createDataSourceManager <a class="header-anchor" href="#createdatasourcemanager" aria-label="Permalink to &quot;createDataSourceManager&quot;"></a></h2><ul><li><p><strong>参数:</strong></p><ul><li><code>{TMagicApp} app</code> 应用实例</li><li><code>{boolean} useMock</code> 是否使用 Mock 数据(可选)</li><li><code>{DataSourceManagerData} initialData</code> 初始数据(可选)</li></ul></li><li><p><strong>返回:</strong></p><ul><li><code>{DataSourceManager}</code> 数据源管理器实例</li></ul></li><li><p><strong>详情:</strong></p><p>创建数据源管理器的工厂函数,会自动设置数据变化监听。</p></li><li><p><strong>示例:</strong></p></li></ul><div class="language-typescript vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">typescript</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { createDataSourceManager } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;@tmagic/data-source&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> dsManager</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> createDataSourceManager</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(app, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">false</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, initialData);</span></span></code></pre></div><h2 id="compiledcondition" tabindex="-1">compiledCondition <a class="header-anchor" href="#compiledcondition" aria-label="Permalink to &quot;compiledCondition&quot;"></a></h2><ul><li><p><strong>参数:</strong></p><ul><li><code>{CondItem} cond</code> 条件项</li><li><code>{object} data</code> 数据上下文</li></ul></li><li><p><strong>返回:</strong></p><ul><li><code>{boolean}</code> 条件是否满足</li></ul></li><li><p><strong>详情:</strong></p><p>编译单个显示条件。</p></li><li><p><strong>示例:</strong></p></li></ul><div class="language-typescript vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">typescript</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { compiledCondition } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;@tmagic/data-source&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> result</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> compiledCondition</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { field: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;user.age&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, op: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;&gt;&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, value: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">18</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { user: { age: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">20</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> } }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">console.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">log</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(result); </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// true</span></span></code></pre></div><h2 id="compliedconditions" tabindex="-1">compliedConditions <a class="header-anchor" href="#compliedconditions" aria-label="Permalink to &quot;compliedConditions&quot;"></a></h2><ul><li><p><strong>参数:</strong></p><ul><li><code>{MNode} node</code> 节点配置</li><li><code>{object} data</code> 数据上下文(可选)</li></ul></li><li><p><strong>返回:</strong></p><ul><li><code>{boolean}</code> 节点是否应该显示</li></ul></li><li><p><strong>详情:</strong></p><p>编译条件组,支持 AND/OR 逻辑。</p></li></ul><h2 id="compilednodefield" tabindex="-1">compiledNodeField <a class="header-anchor" href="#compilednodefield" aria-label="Permalink to &quot;compiledNodeField&quot;"></a></h2><ul><li><p><strong>参数:</strong></p><ul><li><code>{any} value</code> 字段值</li><li><code>{object} data</code> 数据上下文</li></ul></li><li><p><strong>返回:</strong></p><ul><li><code>{any}</code> 编译后的值</li></ul></li><li><p><strong>详情:</strong></p><p>编译节点字段中的数据源配置。</p></li><li><p><strong>示例:</strong></p></li></ul><div class="language-typescript vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">typescript</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { compiledNodeField } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;@tmagic/data-source&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> compiled</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> compiledNodeField</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { isBindDataSource: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, dataSourceId: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;ds_1&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, template: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;\${name}&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { ds_1: { name: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;test&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> } }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span></code></pre></div><h2 id="complieddatasourcefield" tabindex="-1">compliedDataSourceField <a class="header-anchor" href="#complieddatasourcefield" aria-label="Permalink to &quot;compliedDataSourceField&quot;"></a></h2><ul><li><p><strong>参数:</strong></p><ul><li><code>{any} value</code> 字段值</li><li><code>{object} data</code> 数据上下文</li></ul></li><li><p><strong>返回:</strong></p><ul><li><code>{any}</code> 编译后的值</li></ul></li><li><p><strong>详情:</strong></p><p>编译数据源字段选择器的值。</p></li></ul><h2 id="template" tabindex="-1">template <a class="header-anchor" href="#template" aria-label="Permalink to &quot;template&quot;"></a></h2><ul><li><p><strong>参数:</strong></p><ul><li><code>{string} value</code> 模板字符串</li><li><code>{object} data</code> 数据上下文</li></ul></li><li><p><strong>返回:</strong></p><ul><li><code>{string}</code> 替换后的字符串</li></ul></li><li><p><strong>详情:</strong></p><p>模板字符串替换,支持 <code>\${id.field}</code> 格式。</p></li><li><p><strong>示例:</strong></p></li></ul><div class="language-typescript vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">typescript</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { template } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;@tmagic/data-source&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> result</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> template</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;用户名:\${ds_1.user.name},年龄:\${ds_1.user.age}&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { ds_1: { user: { name: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;张三&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, age: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">20</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> } } }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">console.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">log</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(result); </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// &#39;用户名张三年龄20&#39;</span></span></code></pre></div><h2 id="createiteratorcontentdata" tabindex="-1">createIteratorContentData <a class="header-anchor" href="#createiteratorcontentdata" aria-label="Permalink to &quot;createIteratorContentData&quot;"></a></h2><ul><li><p><strong>参数:</strong></p><ul><li><code>{object} itemData</code> 迭代项数据</li><li><code>{string} dsId</code> 数据源 ID</li><li><code>{DataSchema[]} fields</code> 字段配置</li><li><code>{object} dsData</code> 数据源数据</li></ul></li><li><p><strong>返回:</strong></p><ul><li><code>{object}</code> 迭代器数据上下文</li></ul></li><li><p><strong>详情:</strong></p><p>创建迭代器的数据上下文。</p></li></ul><h2 id="compliediteratoritem" tabindex="-1">compliedIteratorItem <a class="header-anchor" href="#compliediteratoritem" aria-label="Permalink to &quot;compliedIteratorItem&quot;"></a></h2><ul><li><p><strong>参数:</strong></p><ul><li><code>{object} options</code> 编译选项</li></ul></li><li><p><strong>返回:</strong></p><ul><li><code>{MNode}</code> 编译后的节点</li></ul></li><li><p><strong>详情:</strong></p><p>编译迭代器项。</p></li></ul><h2 id="updatenode" tabindex="-1">updateNode <a class="header-anchor" href="#updatenode" aria-label="Permalink to &quot;updateNode&quot;"></a></h2><ul><li><p><strong>参数:</strong></p><ul><li><code>{MNode} node</code> 节点配置</li><li><code>{MApp} dsl</code> DSL 配置</li></ul></li><li><p><strong>返回:</strong></p><ul><li><code>{MApp}</code> 更新后的 DSL</li></ul></li><li><p><strong>详情:</strong></p><p>更新 DSL 中的指定节点。</p></li><li><p><strong>示例:</strong></p></li></ul><div class="language-typescript vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">typescript</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { updateNode } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;@tmagic/data-source&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> newDsl</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> updateNode</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { id: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;button_1&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, type: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;button&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, text: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;新文本&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> dsl</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span></code></pre></div><h2 id="registerdatasourceondemand" tabindex="-1">registerDataSourceOnDemand <a class="header-anchor" href="#registerdatasourceondemand" aria-label="Permalink to &quot;registerDataSourceOnDemand&quot;"></a></h2><ul><li><p><strong>参数:</strong></p><ul><li><code>{MApp} dsl</code> DSL 配置</li><li><code>{Record&lt;string, () =&gt; Promise&lt;any&gt;&gt;} modules</code> 数据源模块映射</li></ul></li><li><p><strong>返回:</strong></p><ul><li><code>{Promise&lt;void&gt;}</code></li></ul></li><li><p><strong>详情:</strong></p><p>按需加载数据源模块。根据 DSL 中使用的数据源类型动态加载对应模块。</p></li><li><p><strong>示例:</strong></p></li></ul><div class="language-typescript vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">typescript</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { registerDataSourceOnDemand } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;@tmagic/data-source&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">await</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> registerDataSourceOnDemand</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(dsl, {</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> custom</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: () </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=&gt;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;./CustomDataSource&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">),</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> socket</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: () </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=&gt;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;./SocketDataSource&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">});</span></span></code></pre></div>`,28)])])}const g=s(e,[["render",n]]);export{c as __pageData,g as default};