Skip to content
GU Yiling edited this page Jul 29, 2015 · 3 revisions

mvc/BaseAction / mvc/BaseModel / mvc/BaseView 中封装了对 er/Action / ef/UIModel / ef/UIView 的基本扩展。


BaseAction

方法

back

  • back(isForce)
  • back(defaultURL, isForce)

用来增强返回的行为,默认行为是:

如果 actionContext 中记录了 referrer 则通过 action.redirect 跳转到 referrer;否则跳转到一个可选的默认路径 defaultURL 上。

如果 referrerdefaultURL 都为空且 isForce 为真值,会直接调用浏览器的返回功能(location.back(),比如是从其他页面而非其他 Action 进入本页时)。


BaseModel

BaseModel 提供了 defaultDatasource 的配置共列表、表单基类使用,在 load 时会把 defaultDatasource 和开发人员在业务数 Model 中配置的 datasource 合并。


BaseView

bat-ria 扩展的 Action 在作为子 Action 出现时有一个约定:模板文件中必须有以原 target 名称 + _child 结尾的 target。例如如下 Action 弱需要出现在子 Action 时:

<!-- target: some_action -->
I'm a normal action.

必须增加如下 target:

<!-- target: some_action_child -->
I'm in child action.

如果两者需要有相同模板,则可以直接进行 import

<!-- target: some_action -->
I'm a normal action.

<!-- target: some_action_child -->
<!-- import: some_action -->

方法

showToast

  • showToast(content, options)

显示全局提示信息。

content - 需要显示的内容。

options - 可选,需要传递给 esui/Toast 的其他配置。

popDialog

  • popDialog(options)

创建新对话框并弹出。返回 Dialog 实例,需要自行绑定 ok / cancel 事件进行回调处理。

options - 传递给 esui/Dialog 的配置。其中重要的项有 content / title

waitDialog

  • waitDialog(options)
  • waitDialog(dialog, options)

将新创建的对话框或已指定对话框弹出,返回一个 Promise 对象,其状态在对话框触发 ok 事件时(点击确定)会成为 resolved,触发 cancel 事件时(点击取消)会成为 rejected。用来处理需要等待用户确认且内容比较复杂的弹框,并且方便组合到基于 Promise 的异步流程中。

dialog - 已经初始化好的 esui/Dialog 实例。 options - 传递给 esui/Dialog 的配置。其中重要的项有 content / title

例如在提交前触发确认,确认后返回:

// action
this.view.waitDialog(options).done(function () {
    return this.model.submitRequester(data);
}).done(function () {
    this.view.showToast('Succeeded!');
    this.back('/ad/list');
}).fail(function () {
    this.view.alert('Failed!');
});

showDialog

  • waitDialog(options)
  • waitDialog(dialog, options)

将新创建的对话框或已指定对话框弹出,返回对话框实例。

dialog - 已经初始化好的 esui/Dialog 实例。 options - 传递给 esui/Dialog 的配置。其中重要的项有 content / title。除此之外,确定及取消时的处理函数需要通过 options.onOkoptions.onCanel 传入。根据处理函数的返回值,对话框的关闭将会采取如下机制:

  • 若返回值为 false,不关闭。
  • 若返回值为 mini-event/Event 对象,如果调用过 preventDefault 方法,则不关闭。
  • 若返回值为 Promise 对象,则在 resolve 时关闭。

在 View 中判断结果:

// view
this.showDialog(dialog, {
    onOk: function () {
        if (someCondition) {
            return false; // 不关闭
        }
    }
})

View 中抛出事件,在 Action 中处理逻辑:

// view
this.showDialog(dialog, {
    onOk: function () {
        return view.fire('confirm');
    }
});

// action
this.view.on('confirm', function (e) {
    if (someCondition) {
        e.preventDefault(); // 不关闭
    }
});

View 中抛出一个事件后续要进行异步操作(比如发请求进行数据验证),再决定是否关闭对话框:

// view
this.showDialog(dialog, {
    onOk: function () {
        var pending = new Deferred();
        view.fire('confirm', {
            pending: pending
        });
        return pending;
    }
});

// action
this.view.on('confirm', function (e) {
    model.submitRequester().then(function () {
        e.pending.resolve(); // 关闭
    }, function () {
        e.pending.reject(); // 不关闭
    });
});