tmagic-editor/docs/assets/runtime-api_data-source_dataSource.md.DiemAPn7.js
2026-06-02 11:11:57 +00:00

26 lines
21 KiB
JavaScript
Raw 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 a,z as i,A as t,b5 as e}from"./chunks/framework.V2ssSR2R.js";const c=JSON.parse('{"title":"DataSource基础数据源","description":"","frontmatter":{},"headers":[],"relativePath":"runtime-api/data-source/dataSource.md","filePath":"runtime-api/data-source/dataSource.md"}'),d={name:"runtime-api/data-source/dataSource.md"};function l(n,s,h,p,r,o){return t(),i("div",null,[...s[0]||(s[0]=[e(`<h1 id="datasource-基础数据源" tabindex="-1">DataSource基础数据源 <a class="header-anchor" href="#datasource-基础数据源" aria-label="Permalink to “DataSource基础数据源”"></a></h1><p><code>DataSource</code> 是 <code>@tmagic/data-source</code> 的基础数据源类,用于静态数据管理。</p><h2 id="构造函数" tabindex="-1">构造函数 <a class="header-anchor" href="#构造函数" aria-label="Permalink to “构造函数”"></a></h2><div class="language-typescript"><button title="Copy Code" class="copy"></button><span class="lang">typescript</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">new</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> DataSource</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(options: DataSourceOptions)</span></span></code></pre></div><h3 id="datasourceoptions" tabindex="-1">DataSourceOptions <a class="header-anchor" href="#datasourceoptions" aria-label="Permalink to “DataSourceOptions”"></a></h3><table tabindex="0"><thead><tr><th>参数</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td><code>schema</code></td><td><code>DataSourceSchema</code></td><td>数据源配置</td></tr><tr><td><code>app</code></td><td><code>TMagicApp</code></td><td>应用实例</td></tr><tr><td><code>initialData</code></td><td><code>Record&lt;string, any&gt;</code></td><td>初始数据(可选)</td></tr><tr><td><code>useMock</code></td><td><code>boolean</code></td><td>使用 Mock 数据(可选)</td></tr><tr><td><code>request</code></td><td><code>RequestFunction</code></td><td>请求函数(可选)</td></tr><tr><td><code>ObservedDataClass</code></td><td><code>ObservedDataClass</code></td><td>观察者数据类(可选)</td></tr></tbody></table><h3 id="datasourceschema" tabindex="-1">DataSourceSchema <a class="header-anchor" href="#datasourceschema" aria-label="Permalink to “DataSourceSchema”"></a></h3><table tabindex="0"><thead><tr><th>参数</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td><code>id</code></td><td><code>string</code></td><td>数据源 ID</td></tr><tr><td><code>type</code></td><td><code>&#39;base&#39;</code></td><td>数据源类型</td></tr><tr><td><code>title</code></td><td><code>string</code></td><td>数据源标题(可选)</td></tr><tr><td><code>description</code></td><td><code>string</code></td><td>数据源描述(可选)</td></tr><tr><td><code>fields</code></td><td><code>DataSchema[]</code></td><td>字段配置</td></tr><tr><td><code>methods</code></td><td><code>CodeBlockContent[]</code></td><td>自定义方法配置(可选)</td></tr><tr><td><code>mocks</code></td><td><code>MockSchema</code></td><td>Mock 数据配置(可选)</td></tr><tr><td><code>events</code></td><td><code>EventConfig[]</code></td><td>事件配置(可选)</td></tr></tbody></table><h2 id="属性" tabindex="-1">属性 <a class="header-anchor" href="#属性" aria-label="Permalink to “属性”"></a></h2><table tabindex="0"><thead><tr><th>属性</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td><code>id</code></td><td><code>string</code></td><td>数据源 ID只读</td></tr><tr><td><code>type</code></td><td><code>string</code></td><td>数据源类型,值为 <code>&#39;base&#39;</code></td></tr><tr><td><code>schema</code></td><td><code>DataSourceSchema</code></td><td>配置 schema</td></tr><tr><td><code>fields</code></td><td><code>DataSchema[]</code></td><td>字段配置</td></tr><tr><td><code>methods</code></td><td><code>CodeBlockContent[]</code></td><td>自定义方法配置</td></tr><tr><td><code>data</code></td><td><code>any</code></td><td>当前数据</td></tr><tr><td><code>isInit</code></td><td><code>boolean</code></td><td>是否已初始化</td></tr></tbody></table><h2 id="实例方法" tabindex="-1">实例方法 <a class="header-anchor" href="#实例方法" aria-label="Permalink to “实例方法”"></a></h2><h3 id="setdata" tabindex="-1">setData <a class="header-anchor" href="#setdata" aria-label="Permalink to “setData”"></a></h3><ul><li><p><strong>参数:</strong></p><ul><li><code>{any} data</code> 数据</li><li><code>{string} path</code> 数据路径(可选)</li></ul></li><li><p><strong>返回:</strong></p><ul><li><code>{void}</code></li></ul></li><li><p><strong>详情:</strong></p><p>设置数据源数据。如果指定路径,则只更新该路径的数据。</p></li><li><p><strong>示例:</strong></p></li></ul><div class="language-typescript"><button title="Copy Code" class="copy"></button><span class="lang">typescript</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 设置整个数据</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">ds.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">setData</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">({ name: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;test&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, count: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">10</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> });</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 设置特定路径的数据</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">ds.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">setData</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;newValue&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;user.name&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span></code></pre></div><h3 id="setvalue" tabindex="-1">setValue <a class="header-anchor" href="#setvalue" aria-label="Permalink to “setValue”"></a></h3><ul><li><p><strong>参数:</strong></p><ul><li><code>{string} path</code> 数据路径</li><li><code>{any} data</code> 数据</li></ul></li><li><p><strong>返回:</strong></p><ul><li><code>{void}</code></li></ul></li><li><p><strong>详情:</strong></p><p>按路径设置数据,等同于 <code>setData(data, path)</code>。</p></li><li><p><strong>示例:</strong></p></li></ul><div class="language-typescript"><button title="Copy Code" class="copy"></button><span class="lang">typescript</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">ds.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">setValue</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;user.age&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">25</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span></code></pre></div><h3 id="setfields" tabindex="-1">setFields <a class="header-anchor" href="#setfields" aria-label="Permalink to “setFields”"></a></h3><ul><li><p><strong>参数:</strong></p><ul><li><code>{DataSchema[]} fields</code> 字段配置</li></ul></li><li><p><strong>返回:</strong></p><ul><li><code>{void}</code></li></ul></li><li><p><strong>详情:</strong></p><p>设置数据源的字段配置 <code>fields</code>。一般在初始化或 schema 更新后调用。</p></li></ul><h3 id="setmethods" tabindex="-1">setMethods <a class="header-anchor" href="#setmethods" aria-label="Permalink to “setMethods”"></a></h3><ul><li><p><strong>参数:</strong></p><ul><li><code>{CodeBlockContent[]} methods</code> 自定义方法配置</li></ul></li><li><p><strong>返回:</strong></p><ul><li><code>{void}</code></li></ul></li><li><p><strong>详情:</strong></p><p>设置数据源的自定义方法配置 <code>methods</code>。</p></li></ul><h3 id="ondatachange" tabindex="-1">onDataChange <a class="header-anchor" href="#ondatachange" aria-label="Permalink to “onDataChange”"></a></h3><ul><li><p><strong>参数:</strong></p><ul><li><code>{string} path</code> 数据路径</li><li><code>{(payload: any) =&gt; void} callback</code> 回调函数</li></ul></li><li><p><strong>返回:</strong></p><ul><li><code>{void}</code></li></ul></li><li><p><strong>详情:</strong></p><p>监听指定路径的数据变化。</p><div class="warning custom-block"><p class="custom-block-title">callback 入参取决于 <code>ObservedData</code> 实现</p><ul><li><code>SimpleObservedData</code>(默认):路径监听触发时,回调收到的是 <code>{ updateData, path }</code> 形式的 <code>ChangeEvent</code><strong>不是</strong>纯粹的 newVal。仅在 <code>options.immediate</code> 分支会以「当前路径值」回调一次。</li><li><code>DeepObservedData</code>(基于 <code>deep-state-observer</code>):回调入参贴近「值」的语义。</li></ul><p>如需统一拿到「最新值」,可在回调里用 <code>ds.getData(path)</code> 主动读取。</p></div></li><li><p><strong>示例:</strong></p></li></ul><div class="language-typescript"><button title="Copy Code" class="copy"></button><span class="lang">typescript</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">ds.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">onDataChange</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;user.name&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, (</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">payload</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=&gt;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // SimpleObservedData 下 payload 形如 { updateData, path }</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;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;user.name 变更,最新值:&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, ds.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">getData</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;user.name&#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><h3 id="offdatachange" tabindex="-1">offDataChange <a class="header-anchor" href="#offdatachange" aria-label="Permalink to “offDataChange”"></a></h3><ul><li><p><strong>参数:</strong></p><ul><li><code>{string} path</code> 数据路径</li><li><code>{(payload: any) =&gt; void} callback</code> 回调函数(与 <code>onDataChange</code> 相同的引用)</li></ul></li><li><p><strong>返回:</strong></p><ul><li><code>{void}</code></li></ul></li><li><p><strong>详情:</strong></p><p>取消监听数据变化。</p></li></ul><h3 id="getdefaultdata" tabindex="-1">getDefaultData <a class="header-anchor" href="#getdefaultdata" aria-label="Permalink to “getDefaultData”"></a></h3><ul><li><p><strong>返回:</strong></p><ul><li><code>{any}</code> 默认数据</li></ul></li><li><p><strong>详情:</strong></p><p>根据字段配置获取默认数据。</p></li></ul><h3 id="init" tabindex="-1">init <a class="header-anchor" href="#init" aria-label="Permalink to “init”"></a></h3><ul><li><p><strong>返回:</strong></p><ul><li><code>{Promise&lt;void&gt;}</code></li></ul></li><li><p><strong>详情:</strong></p><p>初始化数据源。</p></li></ul><h3 id="destroy" tabindex="-1">destroy <a class="header-anchor" href="#destroy" aria-label="Permalink to “destroy”"></a></h3><ul><li><p><strong>返回:</strong></p><ul><li><code>{void}</code></li></ul></li><li><p><strong>详情:</strong></p><p>销毁数据源,清理资源。</p></li></ul><h2 id="事件" tabindex="-1">事件 <a class="header-anchor" href="#事件" aria-label="Permalink to “事件”"></a></h2><p>DataSource 继承自 EventEmitter支持以下事件</p><table tabindex="0"><thead><tr><th>事件名</th><th>说明</th><th>回调参数</th></tr></thead><tbody><tr><td><code>change</code></td><td>数据变化时触发</td><td><code>(changeEvent: ChangeEvent)</code><code>ChangeEvent</code> 形如 <code>{ updateData, path? }</code></td></tr></tbody></table><h3 id="示例" tabindex="-1">示例 <a class="header-anchor" href="#示例" aria-label="Permalink to “示例”"></a></h3><div class="language-typescript"><button title="Copy Code" class="copy"></button><span class="lang">typescript</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">ds.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">on</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;change&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, (</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">changeEvent</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=&gt;</span><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;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;数据已变化&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, changeEvent.updateData, changeEvent.path);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">});</span></span></code></pre></div><h2 id="字段配置-dataschema" tabindex="-1">字段配置 (DataSchema) <a class="header-anchor" href="#字段配置-dataschema" aria-label="Permalink to “字段配置 (DataSchema)”"></a></h2><table tabindex="0"><thead><tr><th>参数</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td><code>name</code></td><td><code>string</code></td><td>字段名</td></tr><tr><td><code>type</code></td><td><code>string</code></td><td>字段类型</td></tr><tr><td><code>title</code></td><td><code>string</code></td><td>字段标题(可选)</td></tr><tr><td><code>description</code></td><td><code>string</code></td><td>字段描述(可选)</td></tr><tr><td><code>defaultValue</code></td><td><code>any</code></td><td>默认值(可选)</td></tr><tr><td><code>fields</code></td><td><code>DataSchema[]</code></td><td>子字段(对象类型时)(可选)</td></tr></tbody></table><h3 id="字段配置示例" tabindex="-1">字段配置示例 <a class="header-anchor" href="#字段配置示例" aria-label="Permalink to “字段配置示例”"></a></h3><div class="language-typescript"><button title="Copy Code" class="copy"></button><span class="lang">typescript</span><pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e;" tabindex="0" dir="ltr"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> schema</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</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;user_ds&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> type: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;base&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> fields: [</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { name: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;id&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, type: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;number&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, defaultValue: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { name: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;name&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, type: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;string&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, defaultValue: </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;"> {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> name: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;profile&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> type: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;object&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> fields: [</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { name: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;avatar&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, type: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;string&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { name: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;bio&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, type: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;string&#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>
<span class="line"><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;">};</span></span></code></pre></div>`,41)])])}const E=a(d,[["render",l]]);export{c as __pageData,E as default};