Skip to content

Commit 6c2e0ef

Browse files
committed
fix #222
1 parent 918af30 commit 6c2e0ef

File tree

3 files changed

+22
-12
lines changed

3 files changed

+22
-12
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Obsidian Meta Bind Changelog
22

3+
# 0.12.4
4+
5+
Bug Fixes
6+
7+
- Fixed an issue with JS View Fields not correctly handling the lifecycle of rendered markdown [#222](https://github.com/mProjectsCode/obsidian-meta-bind-plugin/issues/222)
8+
39
# 0.12.3
410

511
Bug Fixes

exampleVault/Advanced Use-Cases.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ list:
33
- 1
44
- 2
55
- 3
6-
index: 2
6+
index: 0
77
options:
88
- "1"
99
- "2"

src/fields/viewFields/jsRenderer/ObsidianJsRenderer.ts

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { getJsEnginePluginAPI } from '../../../utils/ObsUtils';
55
import { type JsExecution } from 'jsEngine/engine/JsExecution';
66
import { type ResultRenderer } from 'jsEngine/engine/ResultRenderer';
77
import { type IJsRenderer } from './IJsRenderer';
8+
import { DomHelpers } from '../../../utils/Utils';
89

910
export class ObsidianJsRenderer implements IJsRenderer {
1011
readonly plugin: MetaBindPlugin;
@@ -13,7 +14,6 @@ export class ObsidianJsRenderer implements IJsRenderer {
1314
jsEngine: API;
1415
code: string;
1516
renderComponent: Component;
16-
renderer: ResultRenderer;
1717

1818
constructor(plugin: MetaBindPlugin, containerEl: HTMLElement, filePath: string, code: string) {
1919
this.plugin = plugin;
@@ -28,14 +28,9 @@ export class ObsidianJsRenderer implements IJsRenderer {
2828

2929
this.jsEngine = getJsEnginePluginAPI(this.plugin);
3030
this.renderComponent = new Component();
31-
this.renderer = this.jsEngine.internal.createRenderer(this.containerEl, this.file.path, this.renderComponent);
3231
}
3332

3433
private async evaluateCode(context: Record<string, unknown>): Promise<JsExecution> {
35-
this.renderComponent.unload();
36-
this.renderComponent = new Component();
37-
this.renderComponent.load();
38-
3934
return this.jsEngine.internal.execute({
4035
code: this.code,
4136
context: {
@@ -51,17 +46,26 @@ export class ObsidianJsRenderer implements IJsRenderer {
5146

5247
async evaluate(context: Record<string, unknown>): Promise<unknown> {
5348
try {
54-
this.containerEl.classList.remove('mb-error');
55-
this.containerEl.innerHTML = '';
49+
DomHelpers.empty(this.containerEl);
50+
DomHelpers.removeClass(this.containerEl, 'mb-error');
51+
52+
this.renderComponent.unload();
53+
this.renderComponent = new Component();
54+
this.renderComponent.load();
5655

5756
const execution = await this.evaluateCode(context);
58-
await this.renderer.render(execution.result);
57+
const renderer = this.jsEngine.internal.createRenderer(
58+
this.containerEl,
59+
this.file.path,
60+
this.renderComponent,
61+
);
62+
await renderer.render(execution.result);
5963

60-
return this.renderer.convertToSimpleObject(execution.result);
64+
return renderer.convertToSimpleObject(execution.result);
6165
} catch (e) {
6266
if (e instanceof Error) {
6367
this.containerEl.innerText = e.message;
64-
this.containerEl.classList.add('mb-error');
68+
DomHelpers.addClass(this.containerEl, 'mb-error');
6569
}
6670

6771
return undefined;

0 commit comments

Comments
 (0)