bat-ria
Version:
RIA extension for Brand Ads Team
261 lines (222 loc) • 6.8 kB
JavaScript
/**
* @file 列表类型`View`基类
* @author Justineo(justice360@gmail.com)
*/
define(function (require) {
// require template
require('../tpl!../tpl/list.tpl.html');
var BaseView = require('./BaseView');
var u = require('underscore');
var moment = require('moment');
/**
* 列表`View`基类
*
* @constructor
* @extends ef.BaseView
*/
function ListView() {
BaseView.apply(this, arguments);
}
/**
* @inheritDoc
*/
ListView.prototype.uiProperties = {};
/**
* @inheritDoc
*/
ListView.prototype.uiEvents = {};
/**
* 收集查询参数并触发查询事件
*
* @param {mini-event.Event} e 控件事件对象
*/
ListView.prototype.submitSearch = function (e) {
var args = this.getSearchArgs();
// 如果是表格排序引发的,把新的排序放进去
if (e.type === 'sort') {
args.orderBy = e.field.field;
args.order = e.order;
}
this.fire('search', {args: args});
};
/**
* 获取查询参数,默认是取`filter`表单的所有数据,加上表格的排序字段和每页显示条目数
*
* @return {Object}
*/
ListView.prototype.getSearchArgs = function () {
// 获取表单的字段
var form = this.get('filter');
var args = form ? form.getData() : {};
// 加上原本的排序方向和排序字段名
args.order = this.model.get('order');
args.orderBy = this.model.get('orderBy');
var keyword = this.get('keyword');
if (keyword) {
// 关键词去空格
args.keyword = u.trim(keyword.getValue());
}
// 日期是独立的
var range = this.get('range');
if (range) {
range = range.getValue().split(',');
args.startTime = moment(range[0]).format('YYYYMMDDHHmmss');
args.endTime = moment(range[1]).format('YYYYMMDDHHmmss');
}
// 带上每页显示数
var pager = this.get('pager');
if (pager) {
args.pageSize = pager.get('pageSize');
}
return args;
};
/**
* 更新页码
*
* @param {mini-event.Event} e 事件对象
* @ignore
*/
function updatePageIndex(e) {
var page = e.target.get('page');
this.fire('pagechange', {page: page});
}
/**
* 根据表格中所选择的行来控制批量更新按钮的启用/禁用状态
*/
ListView.prototype.updateBatchButtonStatus = function () {
var items = this.getSelectedItems();
this.getGroup('batch').set('disabled', u.isEmpty(items));
this.getGroup('batch').set('readOnly', u.isEmpty(items));
};
/**
* 获取table已经选择的列的数据
*
* @return {Object[]} 当前table的已选择列对应的数据
*/
ListView.prototype.getSelectedItems = function () {
var table = this.get('table');
return table ? table.getSelectedItems() : [];
};
/**
* 触发批量操作
*
* @param {Object} e 控件事件对象
* @ignore
*/
function batchModify(e) {
var args = {
// 批量操作的类型
action: e.target.getData('type'),
selectedItems: this.get('table').getSelectedItems()
};
this.fire('batchmodify', args);
}
/**
* 侧边栏模式改变时要调整整体布局
*
* @param {Object} e 模式切换事件对象
*/
function sidebarModeChange(e) {
// Sidebar目前只提供了操作DOM的方式更新布局,需要对ESUI做优化后再升级这块
var neighbor = document.getElementById('neighbor');
if (!neighbor) {
return;
}
if (e.mode === 'fixed') {
neighbor.className = 'ui-sidebar-neighbor';
}
else {
neighbor.className = 'ui-sidebar-neighbor-hide';
}
this.adjustLayout();
}
/**
* @inheritDoc
*/
ListView.prototype.bindEvents = function() {
var pager = this.get('pager');
if (pager) {
// 切换每页大小
pager.on('pagesizechange', this.submitSearch, this);
pager.on('pagechange', updatePageIndex, this);
}
var table = this.get('table');
if (table) {
// 选中表格行后控制批量更新按钮的启用/禁用状态
table.on('select', this.updateBatchButtonStatus, this);
// 表格排序触发查询
table.on('sort', this.submitSearch, this);
}
var filter = this.get('filter');
if (filter) {
// 多条件查询
filter.on('submit', this.submitSearch, this);
}
var sidebar = this.get('sidebar');
if (sidebar) {
sidebar.on('modechange', sidebarModeChange, this);
}
u.each(
this.getGroup('batch'),
function (button) {
if (button instanceof require('esui/Button')) {
// 批量更新
button.on('click', batchModify, this);
}
},
this
);
BaseView.prototype.bindEvents.apply(this, arguments);
};
/**
* 控制元素展现
*
* @override
*/
ListView.prototype.enterDocument = function () {
BaseView.prototype.enterDocument.apply(this, arguments);
this.updateBatchButtonStatus();
this.adjustLayout();
};
/**
* 根据布局变化重新调整自身布局
*/
ListView.prototype.adjustLayout = function () {
var table = this.get('table');
if (table) {
table.adjustWidth();
}
};
/**
* 根据Model数据重新渲染页面
*/
ListView.prototype.refresh = function () {
// 刷新列表
this.refreshList();
// 最后刷新权限显示
this.refreshAuth();
};
/**
* 根据Model数据重新渲染列表
*/
ListView.prototype.refreshList = function () {
var model = this.model;
var table = this.get('table');
if (table) {
table.setDatasource(model.get('tableData'));
}
var pager = this.get('pager');
if (pager) {
pager.setProperties(
{
count: model.get('totalCount'),
page: model.get('pageNo'),
pageSize: model.get('pageSize')
},
{silent: true}
);
}
};
require('er/util').inherits(ListView, BaseView);
return ListView;
});