/** * 渲染适配 - 处理事件分发和 actiontype */ const app = getApp() class BricksRenderer { constructor(page) { this.page = page this.widgetTree = null } /** * 渲染 widget 树 */ render(widgetTree) { this.widgetTree = widgetTree this.page.setData({ tree: widgetTree, treeData: [widgetTree] // WXML 需要数组形式 }) } /** * 处理事件绑定 */ onEvent(e) { const bind = e.currentTarget.dataset.bind || e.detail || {} const { actiontype, target, methodname, url, script } = bind.actiontype ? bind : e.currentTarget.dataset console.log('[Bricks] Event:', actiontype, target) switch (actiontype) { case 'urlwidget': this._handleUrlWidget(url) break case 'method': this._handleMethod(methodname, e) break case 'script': this._handleScript(script) break case 'event': this._handleEvent(e) break default: console.log('[Bricks] Unknown actiontype:', actiontype) } } _handleUrlWidget(url) { if (!url) return wx.navigateTo({ url: '/pages/bricks/bricks?url=' + encodeURIComponent(url) }) } _handleMethod(methodname, e) { if (methodname && this.page[methodname]) { this.page[methodname](e) } } _handleScript(script) { console.log('[Bricks] Script:', script) } _handleEvent(e) { console.log('[Bricks] Event data:', e.detail) } onInput(e) { const bind = e.currentTarget.dataset.bind || {} if (bind.actiontype) { this.onEvent({ currentTarget: { dataset: { bind } }, detail: e.detail }) } } } module.exports = { BricksRenderer }