• Ext JS 6学习文档-第6章-高级组件


    高级组件

    本章涵盖了高级组件,比如 tree 和 data view。它将为读者呈现一个示例项目为 图片浏览器,它使用 tree 和 data view 组件。以下是本章将要讨论的主题:

    • Trees
    • Data views
    • 拖放
    • 图片浏览器 — 一个示例项目

    转载请注明出处:http://www.jeeboot.com/archives/1227.html

    本章的主要目标是探索 tree panel 和 data view 并且使用他们来构建一个示例项目图片浏览器。图片浏览器的最终展示效果如下图。

    这个项目中的最重要的组件是 tree panel 和 data view 。本项目中使用的组件和概念有:

    • tree panel
    • Data views
    • Model
    • store 和 rest 代理
    • 容器和布局
    • 引用
    • 事件处理
    • 过滤
     

    除了 tree panel 和 data view 你已经在之前的章节中学习了所有的我们目前已用到的知识。所以在本章中,我们首先学习 tree panel 和 data view。

    1

    tree panel

    这在 ExtJS 中是一个非常强大且常用的组件,你可以使用它构建任意类型的树。一个 tree panel 是一个树形结构的具有层次化数据的UI。

    它和 Ext.grid.Panel 相似, Ext.tree.Panel 也继承自Ext.panel.Table 。所以,它也是支持多列的。

    和 grid panel 不同的是,tree panel 需要一个 tree store (Ext.Store.TreeStore)。 tree store 具有一些 tree panel 的功能所需使用的特殊的属性。

    基本的 tree

    我们来用一个简单的例子演示。tree panel 至少需要一个 tree store 来提供数据。我们首先来创建 tree store 并硬编码内置数据:

    接着继续创建 Ext.tree.Panel :

    下列截图为以上代码的输出结果:

    1

    现在,我们创建一个高级点的树,它是可以拖拽的。同时还需要用到 tree panel 和 tree store 的一些额外选项。拖拽只需要添加一个插件叫做 treeviewdragdrop 。如以下代码所示:

     

    如以下截图所示的输出。我把节点  South America 拖拽至  Asia 节点之下:

    1

    tree grid

    你可以将多个列添加到 tree ,同时也能创建 tree grid 。默认 tree 包含一列,用的是 tree store 中节点的文本字段。

    在这个 store 中,你可以看到在每个节点上除了节点名称,还添加了一些其他的字段,这些字段用于在 tree panel 的列展示上。tree grid 的功能有例如 列调整,排序,过滤等等,以下是代码:

    以下的 grid 和上面的 tree panel 差不多一样,只是添加为多列了,这个 xtyp treecolumn 提供缩进和文件夹结构。像一个正常的 grid 一样,tree grid 的列可以是任意类型的例如 checkbox,picture,button,URL 等等。

    默认列大小是可调整的,如果需要你也可以固定它的宽度。看下面的代码:

    这是上面 Tree Grid 的输出结果:

     1

     

    Data views

    Ext.view.View (xtype:dataview) 一个现实数据的自定义模板。你需要提供自定义的模板和数据源(store)。模板应该使用 Ext.XTemplate 。

    data view 提供了内置的事件,例如 click,double-click,mouseover,mouseout,等等。

    首先我们创建一个简单的 model 名为 Person ,还需要创建一个 store 并持有 Person 的列表,如以下代码所示:

    然后我们要来创建这个模板。下列模板使用 HTML 的 table 元素来呈现自定义格式的数据。

    在模板中使用一个 model 的字段时,你可以使用花括号包括字段名的方式来使用它,例如:{fieldname}

    XTemplate 支持有条件的展现和 if 语句,如以下代码所示:

    看上面的例子,我使用了 awesome 字体图标的样式。你需要添加下列代码到你的 HTML 文件才行:

    一下代码创建了一个 data view,并且它指定了使用的数据源 store ,template 和 itemSelector :

    itemSelector 是一个必须的简单 CSS 选择器。这里 itemSelector 是应用于在 template 中的 HTML ,就是使用 data-view 类的 div 标签,最终根据这个模板,你在 data view 中选择的每一个 item ,就是这样一个 div 标签,设置了 itemSelector 属性,data view 会知道如何处理这些节点,itemSelector 是用于将 DOM 节点映射到 records 。

    你可以监听的事件例如 click ,double-click ,等等,以上代码已经添加了监听,下列是输出结果:

     1

    图片浏览器 – 一个示例项目

    惯例,我们将用一个示例项目来回顾本章所学,下面是示例项目的最终设计效果:

    1

    通过查看这个设计,你会看到我们使用的最重要的组件就是 tree panel 和 data view 。它们如何使用和一些概念已经在本章的前面部分提及。

    我们看看, 项目的目录结构。

    1

    下列视图代码是本项目的重要部分。这个视图呈现了应用中大部分可视组件。它使用 tree panle 和 data view :

    控制器 ViewController 里处理了 tree panel 的 itemdblclick 事件,只显示所选择节点下的图片。

    还有一个 upload 按钮的 click 事件,这里是未处理的。额,这是你的作业啦。看看下列代码:

    Model 和 Store 的代码在这儿。

    • 注意:当你不指定 model 的字段类型时,将会自动猜测类型。

    我是用的 Go 语言为此项目写的 REST API 。完整可用的代码在这里 https://github.com/ananddayalan/extjs-byexample-picture-explorer

    图片浏览器这个示例是一个非常简单并用来学习 tree panel 和 data view 使用是很合适的。也可以通过添加更多功能来改进这个例子。例如如何通过拖拽将图片从一个相册移动到另一个相册中。 会留给你作为一个编码的练习,但在这里,我给你简要的概述一下拖拽功能,这将帮助你在此项目中添加拖拽功能。

     

    拖拽

    任意元素或组件都能支持拖拽。使用拖拽有三个重要的事情:

    • 配置 item 为可拖拽的Configure the items as draggable
    • 创建放置目标
    • 完成放置目标

     

    配置 item 为可拖拽的

    想要拖拽一个 item ,你需要为每一个元素创建 Ext.dd.DD 实例。

    查看下列代码,通过创建 Ext.dd.DD 让所有使用 pics 类的 div 元素成为可拖拽的:

    创建放置目标

    使用 Ext.dd.DDTarget 创建放置容器。以下代码为所有的使用 album 类的 div 元素创建放置目标:

    完成放置目标

    当一个可拖拽项放置到一个放置容器,我们需要从这个 item 的源位置将它移动到目标位置。这通过覆盖 DD 的onDragDrop 方法来实现。看一看下列代码:

    因为 DD 元素已经是实例了,重写的方法需要应用 Ext.apply(dd, overrides) ,如以下代码所示:

    总结

    在本章中,你学习到如何使用拖拽功能。我们也看了几个高级组件:tree panel 和 data view。最后结合所学创建了一个示例项目。

  • 相关阅读:
    N个数求和(PTA)
    集合相似度(PTA)
    方格取数(1)(状压dp入门)
    Drainage Ditches(dinic模板)
    The Accomodation of Students(二分图判断+匈牙利算法)
    Gopher II(匈牙利算法模板)
    Apple Tree(树状数组)
    node.js中的文件系统
    canvas简易画板
    canvas绘制爱心的几种方法
  • 原文地址:https://www.cnblogs.com/ljb-001/p/6579724.html
Copyright © 2020-2023  润新知