diff --git a/src/Action.js b/src/Action.js index 2a72c49..78323c4 100644 --- a/src/Action.js +++ b/src/Action.js @@ -133,7 +133,7 @@ define( * - 如果该方法正常返回,则认为错误已经处理完毕,继续进入下一步 * - 如果该方法抛出异常,则认为错误未处理,中断执行流程 * - * @param {Object[]} 错误集合 + * @param {Object[]} errors 错误集合 * @ignore */ exports.handleError = function (errors) { diff --git a/src/Deferred.js b/src/Deferred.js index bd9d470..1a9980c 100644 --- a/src/Deferred.js +++ b/src/Deferred.js @@ -13,8 +13,12 @@ define( var assert = require('./assert'); var setImmediate = typeof window.setImmediate === 'function' - ? function (fn) { window.setImmediate(fn); } - : function (fn) { window.setTimeout(fn, 0); }; + ? function (fn) { + window.setImmediate(fn); + } + : function (fn) { + window.setTimeout(fn, 0); + }; /** * 尝试执行相关的回调函数 @@ -64,7 +68,7 @@ define( * * @param {Deferred} original 原`Deferred`对象 * @param {Deferred} deferred 新`Deferred`对象 - * @param {callback} 当`original`运行完毕后,需要执行的函数 + * @param {Function} callback 当`original`运行完毕后,需要执行的函数 * @param {string} actionType 关联的动作类型,`"resolve"`或`"reject"` * @return {Function} 关联函数,可注册在`original`的相关回调函数上 * @ignore diff --git a/src/Enum.js b/src/Enum.js index a4a8ba8..e978b1d 100644 --- a/src/Enum.js +++ b/src/Enum.js @@ -1,215 +1,215 @@ -/** - * ER (Enterprise RIA) - * Copyright 2013 Baidu Inc. All rights reserved. - * - * @ignore - * @file 通用枚举类 - * @author otakustay, wangyaqiong(catkin2009@gmail.com) - * @date $DATE$ - */ -define( - function (require) { - /** - * @class Enum - * - * 通用枚举类,用于生成一个枚举对象 - * - * 枚举对象是业务系统中非常普遍使用的一个类型,其基本功能是将一个数字和具体的含义对应起来 - * - * 枚举是一类数值的集合,枚举中的每一项包括3个属性: - * - * - `value`:对应原始的数字值 - * - `alias`:枚举项在业务中的别名,通常使用大写字母和下划线组成的常量表达方式 - * - `text`:该项显示时的文字 - * - * 使用本类,可以简单地创建一个枚举对象,如: - * - * var Status = new Enum( - * { alias: 'NORMAL', text: '正常' }, - * { alias: 'DISABLED', text: '禁用' }, - * { alias: 'DELETED', text: '已删除' } - * ); - * - * 传入的参数的`value`由0开始今次递增。对于`value`非递增的枚举,在构造时对指定的项传入`value`属性即可,如: - * - * var MouseButton = new Enum( - * { alias: 'LEFT', text: '左键', value: 1 }, - * { alias: 'RIGHT', text: '右键', value: 2 }, - * { alias: 'MIDDLE', text: '中键', value: 4 } - * ); - * - * 枚举会维护2个映射,分别为`value`至`alias`及`alias`至`value`,因此可以简单地通过属性访问的方式获取`alias`或`value`: - * - * if (user.status === Status.DELETED) { - * warn('该用户已经删除'); - * } - * - * @param {meta.EnumItem...} 枚举项 - * @constructor - */ - var exports = {}; - - exports.constructor = function () { - this.valueIndex = []; - this.aliasIndex = {}; - this.textIndex = {}; - - for (var i = 0; i < arguments.length; i++) { - var element = arguments[i]; - if (element.value == null) { - element.value = i; - } - this.addElement(element); - } - }; - - /** - * 为当前枚举对象添加一个{@link meta.EnumItem 枚举项} - * - * @param {meta.EnumItem} element 待添加的枚举项 - * @throws {Error} 如果`value`或`alias`存在重复则抛出异常 - */ - exports.addElement = function (element) { - if (this.hasOwnProperty(element.value)) { - throw new Error('Already defined an element with value' + element.value + ' in this enum type'); - } - - if (this.hasOwnProperty(element.alias)) { - throw new Error('Already defined an element with alias "' + element.alias + '" in this enum type'); - } - - this[element.value] = element.alias; - this[element.alias] = element.value; - - this.valueIndex[element.value] = element; - this.aliasIndex[element.alias] = element; - this.textIndex[element.text] = element; - }; - - /** - * 根据数值获取枚举项 - * - * @param {number} value 数值 - * @return {meta.EnumItem} 对应的枚举项 - */ - exports.fromValue = function (value) { - return this.valueIndex[value]; - }; - - /** - * 根据别名获取枚举项 - * - * @param {string} alias 别名 - * @return {meta.EnumItem} 对应的枚举项 - */ - exports.fromAlias = function (alias) { - return this.aliasIndex[alias]; - }; - - /** - * 根据文字获取枚举项 - * - * @param {string} text 文字 - * @return {meta.EnumItem} 对应的枚举项 - */ - exports.fromText = function (text) { - return this.textIndex[text]; - }; - - /** - * 根据数值获取对应枚举项的文字 - * - * @param {number} value 数值 - * @return {string} 对应的文字 - */ - exports.getTextFromValue = function (value) { - return this.fromValue(value).text; - }; - - /** - * 根据文字获取对应枚举项的文字 - * - * @param {string} alias 文字 - * @return {string} 对应的文字 - */ - exports.getTextFromAlias = function (alias) { - return this.fromAlias(alias).text; - }; - - /** - * 根据数值获取对应枚举项的数值 - * - * @param {string} alias 数值 - * @return {number} 对应的数值 - */ - exports.getValueFromAlias = function (alias) { - return this.fromAlias(alias).value; - }; - - /** - * 根据文字获取对应枚举项的数值 - * - * @param {string} text 文字 - * @return {number} 对应的数值 - */ - exports.getValueFromText = function (text) { - return this.fromText(text).value; - }; - - /** - * 根据数值获取对应枚举项的别名 - * - * @param {number} value 数值 - * @return {string} 对应的别名 - */ - exports.getAliasFromValue = function (value) { - return this.fromValue(value).alias; - }; - - /** - * 根据文字获取对应枚举项的别名 - * - * @param {string} text 文字 - * @return {string} 对应的别名 - */ - exports.getAliasFromText = function (text) { - return this.fromText(text).alias; - }; - - /** - * 将当前枚举转换为数组,常用于下拉选择控件之类的数据源 - * - * @param {Mixed...} [hints] 用于生成数组的提示信息,数组中的每一项可以为字符串或者对象, - * 为字符串时使用`alias`与字符串相同的{@link meta.EnumItem}对象,为对象时则直接将对象插入到当前位置。 - * 不提供此参数则直接将枚举按`value`属性进行排序生成数组返回 - * @return {meta.EnumItem[]} 每次返回一个全新的数组副本 - */ - exports.toArray = function () { - var array = []; - if (arguments.length > 0) { - for (var i = 0; i < arguments.length; i++) { - var hint = arguments[i]; - if (typeof hint === 'string') { - array.push(this.fromAlias(hint)); - } - else { - array.push(hint); - } - } - } - else { - // 必须做一次复制操作,不能让外部的修改影响枚举结构 - for (var i = 0; i < this.valueIndex.length; i++) { - // 由于`value`不一定是连续的,所以一定要去除空项 - if (this.valueIndex[i]) { - array.push(this.valueIndex[i]); - } - } - } - return array; - }; - - var Enum = require('eoo').create(exports); - return Enum; - } -); +/** + * ER (Enterprise RIA) + * Copyright 2013 Baidu Inc. All rights reserved. + * + * @ignore + * @file 通用枚举类 + * @author otakustay, wangyaqiong(catkin2009@gmail.com) + * @date $DATE$ + */ +define( + function (require) { + /** + * @class Enum + * + * 通用枚举类,用于生成一个枚举对象 + * + * 枚举对象是业务系统中非常普遍使用的一个类型,其基本功能是将一个数字和具体的含义对应起来 + * + * 枚举是一类数值的集合,枚举中的每一项包括3个属性: + * + * - `value`:对应原始的数字值 + * - `alias`:枚举项在业务中的别名,通常使用大写字母和下划线组成的常量表达方式 + * - `text`:该项显示时的文字 + * + * 使用本类,可以简单地创建一个枚举对象,如: + * + * var Status = new Enum( + * { alias: 'NORMAL', text: '正常' }, + * { alias: 'DISABLED', text: '禁用' }, + * { alias: 'DELETED', text: '已删除' } + * ); + * + * 传入的参数的`value`由0开始今次递增。对于`value`非递增的枚举,在构造时对指定的项传入`value`属性即可,如: + * + * var MouseButton = new Enum( + * { alias: 'LEFT', text: '左键', value: 1 }, + * { alias: 'RIGHT', text: '右键', value: 2 }, + * { alias: 'MIDDLE', text: '中键', value: 4 } + * ); + * + * 枚举会维护2个映射,分别为`value`至`alias`及`alias`至`value`,因此可以简单地通过属性访问的方式获取`alias`或`value`: + * + * if (user.status === Status.DELETED) { + * warn('该用户已经删除'); + * } + * + * @param {meta.EnumItem...} 枚举项 + * @constructor + */ + var exports = {}; + + exports.constructor = function () { + this.valueIndex = []; + this.aliasIndex = {}; + this.textIndex = {}; + + for (var i = 0; i < arguments.length; i++) { + var element = arguments[i]; + if (element.value == null) { + element.value = i; + } + this.addElement(element); + } + }; + + /** + * 为当前枚举对象添加一个{@link meta.EnumItem 枚举项} + * + * @param {meta.EnumItem} element 待添加的枚举项 + * @throws {Error} 如果`value`或`alias`存在重复则抛出异常 + */ + exports.addElement = function (element) { + if (this.hasOwnProperty(element.value)) { + throw new Error('Already defined an element with value' + element.value + ' in this enum type'); + } + + if (this.hasOwnProperty(element.alias)) { + throw new Error('Already defined an element with alias "' + element.alias + '" in this enum type'); + } + + this[element.value] = element.alias; + this[element.alias] = element.value; + + this.valueIndex[element.value] = element; + this.aliasIndex[element.alias] = element; + this.textIndex[element.text] = element; + }; + + /** + * 根据数值获取枚举项 + * + * @param {number} value 数值 + * @return {meta.EnumItem} 对应的枚举项 + */ + exports.fromValue = function (value) { + return this.valueIndex[value]; + }; + + /** + * 根据别名获取枚举项 + * + * @param {string} alias 别名 + * @return {meta.EnumItem} 对应的枚举项 + */ + exports.fromAlias = function (alias) { + return this.aliasIndex[alias]; + }; + + /** + * 根据文字获取枚举项 + * + * @param {string} text 文字 + * @return {meta.EnumItem} 对应的枚举项 + */ + exports.fromText = function (text) { + return this.textIndex[text]; + }; + + /** + * 根据数值获取对应枚举项的文字 + * + * @param {number} value 数值 + * @return {string} 对应的文字 + */ + exports.getTextFromValue = function (value) { + return this.fromValue(value).text; + }; + + /** + * 根据文字获取对应枚举项的文字 + * + * @param {string} alias 文字 + * @return {string} 对应的文字 + */ + exports.getTextFromAlias = function (alias) { + return this.fromAlias(alias).text; + }; + + /** + * 根据数值获取对应枚举项的数值 + * + * @param {string} alias 数值 + * @return {number} 对应的数值 + */ + exports.getValueFromAlias = function (alias) { + return this.fromAlias(alias).value; + }; + + /** + * 根据文字获取对应枚举项的数值 + * + * @param {string} text 文字 + * @return {number} 对应的数值 + */ + exports.getValueFromText = function (text) { + return this.fromText(text).value; + }; + + /** + * 根据数值获取对应枚举项的别名 + * + * @param {number} value 数值 + * @return {string} 对应的别名 + */ + exports.getAliasFromValue = function (value) { + return this.fromValue(value).alias; + }; + + /** + * 根据文字获取对应枚举项的别名 + * + * @param {string} text 文字 + * @return {string} 对应的别名 + */ + exports.getAliasFromText = function (text) { + return this.fromText(text).alias; + }; + + /** + * 将当前枚举转换为数组,常用于下拉选择控件之类的数据源 + * + * @param {Mixed...} [hints] 用于生成数组的提示信息,数组中的每一项可以为字符串或者对象, + * 为字符串时使用`alias`与字符串相同的{@link meta.EnumItem}对象,为对象时则直接将对象插入到当前位置。 + * 不提供此参数则直接将枚举按`value`属性进行排序生成数组返回 + * @return {meta.EnumItem[]} 每次返回一个全新的数组副本 + */ + exports.toArray = function () { + var array = []; + if (arguments.length > 0) { + for (var i = 0; i < arguments.length; i++) { + var hint = arguments[i]; + if (typeof hint === 'string') { + array.push(this.fromAlias(hint)); + } + else { + array.push(hint); + } + } + } + else { + // 必须做一次复制操作,不能让外部的修改影响枚举结构 + for (var i = 0; i < this.valueIndex.length; i++) { + // 由于`value`不一定是连续的,所以一定要去除空项 + if (this.valueIndex[i]) { + array.push(this.valueIndex[i]); + } + } + } + return array; + }; + + var Enum = require('eoo').create(exports); + return Enum; + } +); diff --git a/src/Model.js b/src/Model.js index 7c7cd68..3af0c16 100644 --- a/src/Model.js +++ b/src/Model.js @@ -209,6 +209,7 @@ define( /** * 移除一个已完成的工作对象 * + * @param {Model} model 当前的`Model`对象 * @param {meta.Promise} worker 工作对象 * @ignore */ @@ -340,7 +341,7 @@ define( }; function forwardToPrepare() { - function processError (ex) { + function processError(ex) { var error = { success: false, name: '$prepare', @@ -417,7 +418,7 @@ define( /** * 设置单个属性值 * - * @param {Model} 作为容器的Model对象 + * @param {Model} model 作为容器的Model对象 * @param {string} name 属性名 * @param {Mixed} value 对应的值 * @return {meta.ChangeRecord} 一个变化记录项 diff --git a/src/ajax.js b/src/ajax.js index ccd3007..cf3fb89 100644 --- a/src/ajax.js +++ b/src/ajax.js @@ -47,9 +47,7 @@ define( } return result.join('&'); default: - return encodedKey - ? encodedKey + '=' + encodeURIComponent(data) - : encodeURIComponent(data); + return encodedKey ? encodedKey + '=' + encodeURIComponent(data) : encodeURIComponent(data); } } @@ -298,7 +296,10 @@ define( fakeXHR.abort(); }; var tick = setTimeout(util.bind(notifyTimeout, this), options.timeout); - fakeXHR.ensure(function () { clearTimeout(tick); }); + var clearTick = function () { + clearTimeout(tick); + }; + fakeXHR.ensure(clearTick); } return fakeXHR; diff --git a/src/controller.js b/src/controller.js index ac52eee..4000c8e 100644 --- a/src/controller.js +++ b/src/controller.js @@ -128,7 +128,7 @@ define( * * 事件总线可以是任何对象,只要实现`fire`方法供事件触发即可 * - * @param {mini-event.EventTarget} eventBug 事件总线对象 + * @param {mini-event.EventTarget} eventBus 事件总线对象 */ exports.setEventBus = function (eventBus) { this.eventBus = eventBus; @@ -921,6 +921,12 @@ define( return; } + // 不要任何不在本页面内打开的东西,包括`_blank`、`_tab`以及指定其它`iframe`等 + var linkTarget = target.getAttribute('target'); + if (linkTarget && linkTarget !== '_self') { + return; + } + // ``元素也可能没有`href`属性 var href = target.getAttribute('href', 2) || ''; // 是hash跳转的链接就取消掉默认的跳转行为 @@ -976,7 +982,7 @@ define( /** * 在指定的元素中渲染一个子Action * - * @param {string | URL} Action对应的url + * @param {string | URL} url Action对应的url * @param {string} container 指定容器元素的id * @param {Object} [options] 交给{@link Action}的额外参数 * @return {meta.Promise} 一个可取消的{@link meta.Promise}对象,当渲染完成后进行`resolved`状态,但可在之前调用`abort()`取消 diff --git a/src/router.js b/src/router.js index 28ab2b1..bd8a580 100644 --- a/src/router.js +++ b/src/router.js @@ -115,7 +115,7 @@ define( * * 事件总线可以是任何对象,只要实现`fire`方法供事件触发即可 * - * @param {mini-event.EventTarget} eventBug 事件总线对象 + * @param {mini-event.EventTarget} eventBus 事件总线对象 */ exports.setEventBus = function (eventBus) { this.eventBus = eventBus;