# View 组件
阅读本文档前请先阅读 UI 框架,了解如何使用本页描述的 View 组件。
当下 JSKit App 的 View 组件 API 还处于 alpha 阶段,组件数量还较少,后续会增加更多的支持,敬请期待!
如有任何问题或者建议欢迎联系开发者交流。
在 UI 框架 中提到, VNode 有如下的基础定义:
interface VNode { pid?: number; id: number; style?: LayoutStyle; } interface VNodeGroup extends VNode {}
只有 VNodeGroup 的子类才可以包含子 VNode
# FlexNode
interface FlexNode extends VNodeGroup {
name: 'flex';
onClick?: (name: string, args: any) => boolean;
onTouch?: (name: string, event: any) => boolean;
}
一个 CSS Flexible Box Layout Module (opens new window) 所述的 Flexbox 模型布局。详见布局与样式。
# TextNode
interface TextNode extends VNode {
name: 'text';
text?: string;
textColor?: string;
gravity?: 'start' | 'left' | 'top' | 'right' | 'end' | 'bottom' | 'center';
textSize?: number | string;
onClick?: (name: string, args: any) => boolean;
onTouch?: (name: string, event: any) => boolean;
}
text显示的文本内容textColor文本的颜色gravity重心,枚举值,指文字的重心textSize字体大小onClick当点击时,回调的方法onTouch当产生触控事件时,回调的方法
用来显示一个文本。
# ImageNode
interface ImageNode extends VNode {
name: 'image';
url: string;
onClick?: (name: string, args: any) => boolean;
onTouch?: (name: string, event: any) => boolean;
}
url图片的URL地址onClick当点击时,回调的方法onTouch当产生触控事件时,回调的方法
显示一个图片
# ListView
interface ListViewNode extends VNodeGroup {
name: 'list-view';
listType?: 'linear' | 'grid' | 'staggered-grid';
scrollDirection?: 'vertical' | 'horizontal';//default is 'vertical'
spanCount?: number;
onClick?: (name: string, args: any) => boolean;
onTouch?: (name: string, event: any) => boolean;
}
listType:列表的类型linear:线性布局grid:网格布局staggered-grid:交错网格布局
scrollDirection:滑动方向vertical:纵向horizontal:横向
spanCount:当 listType 为grid或staggered-grid时,这个是可选的,为总的跨数,缺省时为 12onTouch当产生触控事件时,回调的方法
ListViewNode 将只允许接收 ListItemNode 作为子 Node 。
interface ListItemNode extends VTempData {
spanCount?: number;
}
注意,ListItemNode 是继承自 VTempData。
spanCount此属性只在父节点 ListViewNode 的 listType 为 grid 时生效,spanCount 可表示当前节点的跨数,缺省为 1 。
ListViewNode 支持如下方法:
| 方法名 | 方法参数 | 描述 | 示例 |
|---|---|---|---|
| scrollToPosition | [postion: number, smooth?: boolean] | 滑动到指定位置 | {method: 'scrollToPosition', args: [23, true]} |
| scrollTo | [x: number | string, y: number | string] | 滑动到坐标 | {method: 'scrollTo', args: [233, 0]} |
| scrollBy | [dx: number | string, dy: number | string] | 滑动到相对坐标 | {method: 'scrollBy', args: ["23dp", 0]} |
VNode 的方法可使用 VPagePresenter 的 invoke 来执行,例如:
//获取到 page 的控制器,pageId 为页面的 id。
let presenter = ui.getPage(pageId);
//平滑移动到第 23 个 item。 listId 为 list-view 的节点 id
presenter.invoke(listId, {
method: "scrollToPosition",
args: [23, true]//第一个参数为 position,必填;第二个参数为是否是平滑的滑动,可选。
});
# MarkdownNode
interface MarkdownNode extends VNode {
name: 'md-view';
md?: string;// markdown 文本
linkResolver?: (name: string, args: any) => boolean;
onClick?: (name: string, args: any) => boolean;
onTouch?: (name: string, args: any) => boolean;
}
渲染显示 Markdown 格式文本。遵循 commonmark spec (opens new window) 标准。
linkResolver处理 Markdown 文本里的链接,其链接地址包含在string类型的args.link中。如果 linkResolver 已经处理了链接事件,应当返回true。如果返回false将会交由 UI 框架处理。
# ScrollViewNode
interface ScrollViewNode extends VNodeGroup {
name: 'scroll-view';
scrollDirection?: 'vertical' | 'horizontal';//default is 'vertical'
onClick?: (name: string, args: any) => boolean;
onTouch?: (name: string, args: any) => boolean;
}
ScrollViewNode 是可以并只接受一个子 VNode 的容器。当子 VNode 超出 ScrollViewNode 范围时,可滑动显示。