77 lines
1.7 KiB
JavaScript

/**
* 渲染适配 - 处理事件分发和 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 }