1. var component = new NEKUI.Component({
    template: template,
    data: {
    table: {
    source: []
    }
    },
    init: function() {
    this.data.table.source = [];
    for(var i = 0; i < 3; ++i) {
    this.data.table.source.push({
    title: 'test' + i,
    col1: '' + i,
    value: 10 * i
    });
    }
    }
    });

无条纹

表格 ui.table - 图2

  1. <ui.table strip={false} source={table.source} >
    <table.col name="title" key="title" />
    <table.col name="value" key="value" />
    </ui.table>
  1. var component = new NEKUI.Component({
    template: template,
    data: {
    table: {
    source: []
    }
    },
    init: function() {
    setTimeout(function() {
    this.data.table.source = [];
    for(var i = 0; i < 3; ++i) {
    this.data.table.source.push({
    title: 'test' + i,
    col1: '' + i,
    value: 10 * i
    });
    }
    this.$update();
    }.bind(this), 200);
    }
    });

过滤器

  1. <ui.table source={table.source} >
    <table.col name="title" key="title" filter={this.titleFilter}/>
    <table.col name="value" key="value" />
    </ui.table>
  1. var component = new NEKUI.Component({
    template: template,
    data: {
    table: {
    source: []
    }
    },
    init: function() {
    setTimeout(function() {
    this.data.table.source = [];
    for(var i = 0; i < 3; ++i) {
    this.data.table.source.push({
    title: 'test' + i,
    col1: '' + i,
    value: 10 * i
    });
    }
    this.$update();
    }.bind(this), 200);
    },
    titleFilter: function(val) {
    return '* ' + val + ' *';
    }
    });

多级表头

表格 ui.table - 图4

  1. <ui.table source={table.source} >
    <table.col name="title" key="title" width="100" />
    <table.col name="col1">
    <table.col name="col1.1">
    <table.col name="col1.1.2" key="value" width="160" />
    <table.col name="col1.1.3" key="value2" width="160" />
    </table.col>
    <table.col name="col1.2" key="value" width="160" />
    </table.col>
    <table.col name="value" key="value" width="200" />
    </ui.table>
  1. var component = new NEKUI.Component({
    template: template,
    data: {
    table: {
    source: []
    }
    },
    init: function() {
    this.data.table.source = [];
    for(var i = 0; i < 3; ++i) {
    this.data.table.source.push({
    title: 'test' + i,
    col1: '' + i,
    value: 10 * i,
    value2: 'test'
    });
    }
    }
    });

悬浮表头和底部

控制表头和底部的悬浮需要对 事件进行监听,在默认的情况下,监听对象是 window,即页面的滚动。

如果页面布局比较特殊,需要指定监听的对象,则可以通过 scrollParent 指定会发生滚动的容器,如 scrollParent="#example"

  1. <ui.table
    stickyHeader
    stickyFooter
    stickyHeaderOffset=64
    stickyFooterOffset=0
    source={table.source} >
    <table.col name="title" key="title" width=500 />
    <table.col name="value" key="value" width=500 />
    </ui.table>
  1. var component = new NEKUI.Component({
    template: template,
    data: {
    table: {
    source: []
    }
    },
    init: function() {
    this.data.table.source = [];
    for(var i = 0; i < 20; ++i) {
    this.data.table.source.push({
    title: 'test' + i,
    col1: '' + i,
    value: 10 * i
    });
    }
    }
    });

表头固定在表格顶部

表格 ui.table - 图6

  1. var component = new NEKUI.Component({
    template: template,
    data: {
    table: {
    source: []
    }
    },
    init: function() {
    this.data.table.source = [];
    for(var i = 0; i < 20; ++i) {
    this.data.table.source.push({
    title: 'test' + i,
    col1: '' + i,
    value: 10 * i
    });
    }
    }
    });

  1. <ui.table fixedHeader height=200 source={table.source}>
    <table.col name="title" key="title" fixed/>
    <table.col name="col1" key="col1" />
    <table.col name="value" key="value" fixed="right"/>
    </ui.table>
  1. var component = new NEKUI.Component({
    template: template,
    data: {
    table: {
    source: []
    }
    },
    init: function() {
    this.data.table.source = [];
    for(var i = 0; i < 20; ++i) {
    this.data.table.source.push({
    title: 'test' + i,
    col1: '' + i,
    value: 10 * i
    });
    }
    }
    });

自定义模版

表格 ui.table - 图8

  1. <ui.table source={table.source} on-itemclick={this.onItemClick($event)} on-headerclick={this.onHeaderClick($event)}>
    <table.col name="title" key="title">
    <table.template type="header">
    {'<a href={header.name+">+~!!@#$%^&*()"} on-click={this.emitEvent("headerclick", header)}>I am && {header.name}</a>'}
    {'<anchor/>'}
    </table.template>
    <table.template template={tdTpl} />
    </table.col>
    <table.col name="value" key="value" />
    </ui.table>
  1. var anchor = NEKUI.Component.extend({
    name: 'anchor',
    template: '<a>&nbsp;anchor</a>',
    });
    NEKUI.UITable.filter('txtFilter', function(val) {
    return val + '*';
    });
    var component = new NEKUI.Component({
    template: template,
    data: {
    table: {
    source: []
    },
    tdTpl: '<a on-click={this.emitEvent("itemclick", item, this)}>I am {item.title | txtFilter}</a>'
    },
    init: function() {
    this.data.table.source = [];
    for(var i = 0; i < 3; ++i) {
    this.data.table.source.push({
    title: 'test' + i,
    col1: '' + i,
    value: 10 * i
    });
    }
    },
    onItemClick: function(e) {
    console.log(e);
    },
    onHeaderClick: function(e) {
    console.log(e);
    }
    });

自定义行样式

通过设置 item.trClassitem.trStyle 修改每一行的样式。

  1. <ui.table stickyHeader source={table.source}>
    <table.col name="title" key="title" />
    <table.col name="value" key="value" />
    </ui.table>
  1. var component = new NEKUI.Component({
    template: template,
    data: {
    table: {
    source: []
    }
    },
    init: function() {
    var colors = ['#FFBC07', '#E89406', '#FF8306', '#E85706', '#FF3B07'];
    this.data.table.source = [];
    for(var i = 0; i < 5; ++i) {
    this.data.table.source.push({
    title: 'test' + i,
    col1: '' + i,
    value: 10 * i,
    trStyle: 'background-color:' + colors[i]
    });
    }
    }
    });

排序

没有实际的排序效果,请查看 console 打印的事件对象。

表格 ui.table - 图10

  1. <ui.table source={table.source} sorting={table.sorting} on-sort={this.onSort($event)}>
    <table.col name="title" key="title" sortable/>
    <table.col name="value" key="value" sortable/>
    </ui.table>
  1. var component = new NEKUI.Component({
    template: template,
    data: {
    table: {
    source: [],
    sorting: {
    key: 'title',
    isAsc: 0
    }
    }
    },
    init: function() {
    this.data.table.source = [];
    for(var i = 0; i < 3; ++i) {
    this.data.table.source.push({
    title: 'test' + i,
    col1: '' + i,
    value: 10 * i
    });
    }
    },
    onSort: function(e) {
    console.log(e);
    }
    });

分页

分页的配置参考 分页 Pager

    多选

    表格 ui.table - 图12

    1. <check
      name="全选"
      checked={checkAllStatus}
      />
      <ui.table source={table.source} on-checkchange={this.onCheck($event)}>
      <table.col name="title" key="title" type="check" />
      <table.col name="value" key="value" />
      </ui.table>
    1. var component = new NEKUI.Component({
      template: template,
      computed: {
      checkAllStatus: {
      get: function() {
      var checkedList = this.data.table.source.filter(function(item) {
      return item._checked;
      });
      return checkedList.length === this.data.table.source.length ? true :
      checkedList.length > 0 ? null :
      false;
      },
      set: function(val) {
      if(val !== null) {
      this.data.table.source.forEach(function(item) {
      item._checked = !!val;
      });
      }
      }
      }
      },
      data: {
      table: {
      source: []
      }
      },
      init: function() {
      this.data.table.source = [];
      for(var i = 0; i < 3; ++i) {
      this.data.table.source.push({
      title: 'test' + i,
      col1: '' + i,
      value: 10 * i
      });
      }
      },
      onCheck: function(e) {
      console.log(e);
      }
      });

    在进行数据配置时,模版的配置方式更为灵活。

    • template,模版字符串;
    • format,纯粹的字符串格式化,不对html进行渲染,保留插值语法;
    • formatter,通过函数返回模版字符串,适用于当模版需要动态运算生成的情景。 加上前缀 header 成为 headerTemplateheaderFormatheaderFormatter,可作为表头的模版。

    1. <ui.table
      fixedHeader
      columns={table.columns}
      sorting={table.sorting}
      paging={table.paging}
      source={table.source}
      loading={loading}
      />
    1. var component = new NEKUI.Component({
      template: template,
      data: {
      table: {
      columns: [
      {
      name: 'title',
      key: 'title',
      tip: 'tippppppp',
      width: 120,
      formatter: function(column, item) {
      return '<a>I\'m ' + item.title + '</a>';
      },
      },
      {
      name: 'col1',
      key: 'col1',
      children: [
      {
      name: 'col1.2',
      key: 'value',
      format: '{item.value} %',
      sortable: true
      },
      {
      name: 'col1.3',
      key: 'col1',
      sortable: true
      }
      ]
      }
      ],
      sorting: {
      key: 'col1',
      isAsc: 0
      },
      paging: {
      pageSize: 10,
      sumTotal: 100,
      current: 1
      },
      source: []
      }
      },
      init: function() {
      this.data.table.source = [];
      for(var i = 0; i < 5; ++i) {
      this.data.table.source.push({
      title: 'test' + i,
      col1: '' + i,
      value: 10 * i
      });
      }
      }
      });

    空数据

    表格 ui.table - 图14

    1. <ui.table width=700>
      <table.col name="title" key="title" />
      <table.col name="value" key="value" />
      </ui.table>
    1. var component = new NEKUI.Component({
      template: template,
      data: {
      table: {
      }
      }
      });

    加载中

    1. <ui.table width=700 loading={true}>
      <table.col name="title" key="title" />
      <table.col name="value" key="value" />
      </ui.table>
    1. var component = new NEKUI.Component({
      template: template,
      data: {
      table: {
      }
      }
      });

    特殊

    由于组件内部有部分模版是使用字符串形式存储,只有在使用时才是进行解析,因此当页面对 Regular 的插值符号进行修改时,需要进行特殊处理。

    为了向组件内部传递新修改的插值,需要在 Regular 下挂载两个新的属性 BEGIN, 。

    API

    Classes

    UITable

    Kind: global classExtend: Component

    new UITable()

    TableCol

    Kind: global classExtend: Component

    new TableCol()

    ParamTypeDescription
    [options.data]object= 绑定属性
    [options.data.name]string=> 表头名称
    [options.data.key]string=> 列属性字段
    [options.data.tip]string=> 提示信息
    [options.data.type]string=> 列内容的预设类型
    [options.data.width]string=> 列宽
    [options.data.tdClass]string=> 列内容样式
    [options.data.thClass]string=> 表头样式
    [options.data.sortable]boolean=> 可排序
    [options.data.children]string=> 子表头
    [options.data.fixed]boolean | => 列固定开关,默认left为做固定,right为右固定
    [options.data.template]string=> 列内容模版

    Kind: global classExtend: Component

    “sort 排序事件”

    Kind: event emittedProperties

    NameTypeDescription
    senderobject事件来源
    ascboolean是否升序
    columnobject目标列
    columnIndexnumber目标列序号
    keystring排序字段
    sortingobject排序设置对象

    “checkchange 多选事件”

    Kind: event emittedProperties

    Kind: event emittedProperties

    NameTypeDescription
    senderobject事件来源
    customboolean自定义事件标识
    paramarray自定义事件所带的参数

    “paging 分页事件”

    Kind: event emittedProperties