77 lines
1.7 KiB
JavaScript
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 }
|