์ฌ์ฉ์๊ฐ ํ๋ฌ๊ทธ์ธ์ ์ผ๋ถ๋ฅผ ์ง์ ๊ตฌ์ฑํ ์ ์๋๋ก ํ๋ ค๋ฉด ์ค์ (settings) ์ผ๋ก ๋ ธ์ถํ ์ ์์ต๋๋ค.
์ด ๊ฐ์ด๋์์๋ ๋ค์๊ณผ ๊ฐ์ ์ค์ ํ์ด์ง๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋๋ค ๐
ํ๋ฌ๊ทธ์ธ์ ์ค์ ์ ์ถ๊ฐํ๋ ์ฃผ๋ ์ด์ ๋ ์ฌ์ฉ์๊ฐ Obsidian์ ์ข ๋ฃํ ํ์๋ ์ ์ง๋๋ ๊ตฌ์ฑ์ ์ ์ฅํ๊ธฐ ์ํจ์ ๋๋ค. ๋ค์ ์์ ๋ ๋์คํฌ์์ ์ค์ ์ ์ ์ฅํ๊ณ ๋ก๋ํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค:
import { Plugin } from 'obsidian';
import { ExampleSettingTab } from './settings';
interface ExamplePluginSettings {
dateFormat: string;
}
const DEFAULT_SETTINGS: Partial<ExamplePluginSettings> = {
dateFormat: 'YYYY-MM-DD',
};
export default class ExamplePlugin extends Plugin {
settings: ExamplePluginSettings;
async onload() {
await this.loadSettings();
this.addSettingTab(new ExampleSettingTab(this.app, this));
}
async loadSettings() {
this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData());
}
async saveSettings() {
await this.saveData(this.settings);
}
}
์ค์ ์ ์ค์ฒฉ๋ ์์ฑ
Object.assign()
์ ์ค์ฒฉ๋ ์์ฑ์ ๋ํ ์ฐธ์กฐ๋ฅผ ๋ณต์ฌํฉ๋๋ค(์์ ๋ณต์ฌ). ์ค์ ๊ฐ์ฒด์ ์ค์ฒฉ๋ ์์ฑ์ด ํฌํจ๋ ๊ฒฝ์ฐ, ๊ฐ ์ค์ฒฉ๋ ์์ฑ์ ์ฌ๊ท์ ์ผ๋ก ๋ณต์ฌํด์ผ ํฉ๋๋ค(๊น์ ๋ณต์ฌ). ๊ทธ๋ ์ง ์์ผ๋ฉด ์ค์ฒฉ๋ ์์ฑ์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ดObject.assign()
์ ์ฌ์ฉํ์ฌ ๋ณต์ฌ๋ ๋ชจ๋ ๊ฐ์ฒด์ ์ ์ฉ๋ฉ๋๋ค.
์ฌ๊ธฐ์๋ ๋ง์ ๋ด์ฉ์ด ์์ผ๋ ๐คฏ, ๊ฐ ๋ถ๋ถ์ ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ค์ ์ ์ ์์ฑํ๊ธฐ
๋จผ์ , ์ฌ์ฉ์๊ฐ ๊ตฌ์ฑํ ์ ์๋๋ก ํ๋ ค๋ ์ค์ ์ ๋ํ ์ ์ ExamplePluginSettings
๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ํ๋ฌ๊ทธ์ธ์ด ํ์ฑํ๋์ด ์๋ ๋์ settings
๋ฉค๋ฒ ๋ณ์์์ ์ค์ ์ ์ ๊ทผํ ์ ์์ต๋๋ค.
interface ExamplePluginSettings {
dateFormat: string;
}
export default class ExamplePlugin extends Plugin {
settings: ExamplePluginSettings;
// ...
}
์ค์ ๊ฐ์ฒด ์ ์ฅ ๋ฐ ๋ก๋ํ๊ธฐ
loadData() ๋ฐ saveData()๋ ๋์คํฌ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ฒ์ํ๋ ์ฌ์ด ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ์ด ์์ ๋ ๋ํ ํ๋ฌ๊ทธ์ธ์ ๋ค๋ฅธ ๋ถ๋ถ์์ loadData()
๋ฐ saveData()
๋ฅผ ๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ๋ ๊ฐ์ง ํฌํผ ๋ฉ์๋๋ฅผ ์๊ฐํฉ๋๋ค.
export default class ExamplePlugin extends Plugin {
// ...
async loadSettings() {
this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData());
}
async saveSettings() {
await this.saveData(this.settings);
}
}
๋ง์ง๋ง์ผ๋ก, ํ๋ฌ๊ทธ์ธ์ด ๋ก๋๋ ๋ ์ค์ ์ ๋ก๋ํด์ผ ํฉ๋๋ค:
async onload() {
await this.loadSettings();
// ...
}
๊ธฐ๋ณธ๊ฐ ์ ๊ณตํ๊ธฐ
์ฌ์ฉ์๊ฐ ํ๋ฌ๊ทธ์ธ์ ์ฒ์ ํ์ฑํํ๋ฉด ์ค์ ์ด ์์ง ๊ตฌ์ฑ๋์ง ์์์ต๋๋ค. ์์ ์์ ๋ ๋๋ฝ๋ ์ค์ ์ ๋ํ ๊ธฐ๋ณธ๊ฐ์ ์ ๊ณตํฉ๋๋ค.
์ด๊ฒ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํดํ๊ธฐ ์ํด ๋ค์ ์ฝ๋๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค:
Object.assign({}, DEFAULT_SETTINGS, await this.loadData())
Object.assign()
์ ํ ๊ฐ์ฒด์์ ๋ค๋ฅธ ๊ฐ์ฒด๋ก ๋ชจ๋ ์์ฑ์ ๋ณต์ฌํ๋ JavaScript ํจ์์
๋๋ค. loadData()
์์ ๋ฐํ๋ ๋ชจ๋ ์์ฑ์ DEFAULT_SETTINGS
์ ์์ฑ์ ๋ฎ์ด์๋๋ค.
const DEFAULT_SETTINGS: Partial<ExamplePluginSettings> = {
dateFormat: 'YYYY-MM-DD',
};
Tip
Partial<Type>
์Type
์ ๋ชจ๋ ์์ฑ์ ์ ํ์ ์ผ๋ก ์ค์ ํ ํ์ ์ ๋ฐํํ๋ TypeScript ์ ํธ๋ฆฌํฐ์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ ์ ๊ณตํ๋ ค๋ ์์ฑ๋ง ์ ์ํ๋ฉด์ ํ์ ๊ฒ์ฌ๋ฅผ ํ์ฑํํ ์ ์์ต๋๋ค.
์ค์ ํญ ๋ฑ๋กํ๊ธฐ
์ด์ ํ๋ฌ๊ทธ์ธ์ ํ๋ฌ๊ทธ์ธ ๊ตฌ์ฑ์ ์ ์ฅํ๊ณ ๋ก๋ํ ์ ์์ง๋ง, ์ฌ์ฉ์๋ ์์ง ์ค์ ์ ๋ณ๊ฒฝํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์ค์ ํญ์ ์ถ๊ฐํ๋ฉด ์ฌ์ฉ์๊ฐ ํ๋ฌ๊ทธ์ธ ์ค์ ์ ์ ๋ฐ์ดํธํ ์ ์๋ ์ฌ์ฉํ๊ธฐ ์ฌ์ด ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค:
this.addSettingTab(new ExampleSettingTab(this.app, this));
์ฌ๊ธฐ์ ExampleSettingTab
์ PluginSettingTab์ ํ์ฅํ๋ ํด๋์ค์
๋๋ค:
import ExamplePlugin from './main';
import { App, PluginSettingTab, Setting } from 'obsidian';
export class ExampleSettingTab extends PluginSettingTab {
plugin: ExamplePlugin;
constructor(app: App, plugin: ExamplePlugin) {
super(app, plugin);
this.plugin = plugin;
}
display(): void {
let { containerEl } = this;
containerEl.empty();
new Setting(containerEl)
.setName('Date format')
.setDesc('Default date format')
.addText((text) =>
text
.setPlaceholder('MMMM dd, yyyy')
.setValue(this.plugin.settings.dateFormat)
.onChange(async (value) => {
this.plugin.settings.dateFormat = value;
await this.plugin.saveSettings();
})
);
}
}
display()
๋ ์ค์ ํญ์ ๋ด์ฉ์ ๋น๋ํ๋ ๊ณณ์
๋๋ค. ์์ธํ ๋ด์ฉ์ HTML elements๋ฅผ ์ฐธ์กฐํ์ธ์.
new Setting(containerEl)
์ ์ปจํ
์ด๋ ์์์ ์ค์ ์ ์ถ๊ฐํฉ๋๋ค. ์ด ์์ ๋ addText()
๋ฅผ ์ฌ์ฉํ์ฌ ํ
์คํธ ํ๋๋ฅผ ์ฌ์ฉํ์ง๋ง, ๋ค๋ฅธ ์ฌ๋ฌ ์ค์ ์ ํ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํ ์คํธ ํ๋์ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์ค์ ๊ฐ์ฒด๋ฅผ ์ ๋ฐ์ดํธํ ๋ค์ ๋์คํฌ์ ์ ์ฅํฉ๋๋ค:
.onChange(async (value) => {
this.plugin.settings.dateFormat = value;
await this.plugin.saveSettings();
})
์ํ์ต๋๋ค! ๐ช ์ฌ์ฉ์๋ค์ ํ๋ฌ๊ทธ์ธ๊ณผ ์ํธ ์์ฉํ๋ ๋ฐฉ์์ ์ฌ์ฉ์ ์ ์ํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํด ์ค ๊ฒ์ ๋ํด ๊ฐ์ฌํ ๊ฒ์ ๋๋ค. ๋ค์ ๊ฐ์ด๋๋ก ๋์ด๊ฐ๊ธฐ ์ ์, ๋ฐฐ์ด ๋ด์ฉ์ ๋ฐํ์ผ๋ก ๋ค๋ฅธ ์ค์ ์ ์ถ๊ฐํ์ฌ ์คํํด๋ณด์ธ์.