h5:add ListNode and ListItemNode

This commit is contained in:
pengfei.zhou 2019-12-28 14:25:03 +08:00 committed by osborn
parent 47faafae7e
commit dd12ca765b
7 changed files with 106 additions and 4 deletions

View File

@ -36,7 +36,7 @@ export class DoricContext {
for (let i = 0; i < arguments.length; i++) {
argumentsList.push(arguments[i])
}
Reflect.apply(jsCallEntityMethod, this.panel, argumentsList)
return Reflect.apply(jsCallEntityMethod, this.panel, argumentsList)
}
init(frame: {

View File

@ -11,6 +11,8 @@ import { ModalPlugin } from './plugins/ModalPlugin'
import { StoragePlugin } from "./plugins/StoragePlugin"
import { NavigatorPlugin } from "./navigate/NavigatorPlugin"
import { PopoverPlugin } from './plugins/PopoverPlugin'
import { DoricListItemNode } from "./shader/DoricListItemNode"
import { DoricListNode } from "./shader/DoricListNode"
const bundles: Map<string, string> = new Map
@ -57,3 +59,5 @@ registerViewNode('HLayout', DoricHLayoutNode)
registerViewNode('Text', DoricTextNode)
registerViewNode('Image', DoricImageNode)
registerViewNode('Scroller', DoricScrollerNode)
registerViewNode('ListItem', DoricListItemNode)
registerViewNode('List', DoricListNode)

View File

@ -0,0 +1,5 @@
import { DoricStackNode } from "./DoricStackNode";
export class DoricListItemNode extends DoricStackNode {
}

View File

@ -0,0 +1,75 @@
import { DoricSuperNode, DVModel, DoricViewNode } from "./DoricViewNode";
import { DoricListItemNode } from "./DoricListItemNode";
export class DoricListNode extends DoricSuperNode {
itemCount = 0
renderItemFuncId?: string
onLoadMoreFuncId?: string
loadMoreViewId?: string
batchCount = 15
loadMore = false
childNodes: DoricListItemNode[] = []
blendProps(v: HTMLParagraphElement, propName: string, prop: any) {
switch (propName) {
case "itemCount":
this.itemCount = prop as number
break
case "renderItem":
this.reset()
this.renderItemFuncId = prop as string
break
case "onLoadMore":
this.onLoadMoreFuncId = prop as string
break
case "loadMoreView":
this.loadMoreViewId = prop as string
break
case "batchCount":
this.batchCount = prop as number
break
case "loadMore":
this.loadMore = prop as boolean
break
default:
super.blendProps(v, propName, prop)
break
}
}
reset() {
while (this.view.lastElementChild) {
this.view.removeChild(this.view.lastElementChild)
}
}
onBlended() {
super.onBlended()
if (this.childNodes.length !== this.itemCount) {
const ret = this.callJSResponse("renderBunchedItems", 0, this.itemCount) as DVModel[]
this.childNodes = ret.map(e => {
const viewNode = DoricViewNode.create(this.context, e.type) as DoricListItemNode
viewNode.viewId = e.id
viewNode.init(this)
viewNode.blend(e.props)
this.view.appendChild(viewNode.view)
return viewNode
})
}
}
blendSubNode(model: DVModel) {
const viewNode = this.getSubNodeById(model.id)
if (viewNode) {
viewNode.blend(model.props)
}
}
getSubNodeById(viewId: string) {
return this.childNodes.filter(e => e.viewId === viewId)[0]
}
build() {
const ret = document.createElement('div')
ret.style.overflow = "scroll"
return ret
}
}

View File

@ -0,0 +1,18 @@
import { DoricSuperNode, DVModel } from "./DoricViewNode";
export class DoricRefreshableNode extends DoricSuperNode {
blendSubNode(model: DVModel) {
}
getSubNodeById(viewId: string) {
return undefined
}
build() {
const ret = document.createElement('div')
return ret
}
}

View File

@ -12,7 +12,7 @@ export class DoricTextNode extends DoricViewNode {
return div
}
blendProps(v: HTMLParagraphElement, propName: string, prop: any) {
blendProps(v: HTMLElement, propName: string, prop: any) {
switch (propName) {
case 'text':
this.textElement.innerText = prop

View File

@ -309,7 +309,7 @@ export abstract class DoricViewNode {
for (let i = 1; i < arguments.length; i++) {
argumentsList.push(arguments[i])
}
Reflect.apply(this.context.invokeEntityMethod, this.context, argumentsList)
return Reflect.apply(this.context.invokeEntityMethod, this.context, argumentsList)
}
}