Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

改进表单取消时的检验 #23

Closed
otakustay opened this issue May 5, 2014 · 16 comments
Closed

改进表单取消时的检验 #23

otakustay opened this issue May 5, 2014 · 16 comments

Comments

@otakustay
Copy link
Member

改为:

  1. FormView第一次渲染完后,使用form.getData()保存一份表单的数据
  2. 当取消时,再使用form.getData()获取数据,与第1步的数据进行比对

@yanghuabei

@yanghuabei
Copy link
Member

是要放在View里做这个事情吗?下午会上好像是说Form控件里面做

@otakustay
Copy link
Member Author

下午的结论是在View做,使用Form控件提供的数据

Form控件作为一个普通的控件,他肯定不应该知道你的业务是有这种需求的,不会特别去支持,不然随着不同的业务一个控件就会非常庞大了

@yanghuabei
Copy link
Member

有道理,可能我下午听岔了。

@yanghuabei
Copy link
Member

晚上跟@Exodia @srhb18 讨论了实现方案,大家帮忙看看有没有什么问题

  • FormActioninitBehavior中添加

        // 保存一份最初的form表单内容到model,用于判断表单内容是否被更改
        var initialFormData = this.view.getEntity();
        this.model.set('initialFormData', initialFormData, { silent: true });
    
  • FormActioncancelEdit中调用FormView新添加的方法isFormDataChanged判断表单数据是否发生变化

  • 移除FormModelisEntityChanged方法

@otakustay
Copy link
Member Author

方法OK,应该没问题

留一下记录,ADM2.0中有以下需要修改

src/channel/FormModel.js
src/channelGroup/FormModel.js
src/company/FormModel.js
src/contact/FormModel.js
src/delivery/FormModel.js
src/manager/FormModel.js
src/setting/BindUnionModel.js
src/setting/ModifyMailModel.js
src/setting/ModifyNameModel.js
src/setting/ModifyPasswordModel.js
src/slot/BatchChannelFormModel.js
src/slot/BatchOrderFormModel.js
src/slot/FormModel.js
src/tool/creative/FlashFormModel.js
src/tool/creative/ImageFormModel.js
src/tool/creative/RichFormModel.js
src/tool/creative/TextFormModel.js
src/tool/template/FormModel.js

BESC中现在没有

@otakustay
Copy link
Member Author

这里顺便提一个问题,类似initialFormData这种东西,放Model也行,挂Action下当属性也行的情况下,我们的判断标准和依据是啥?一概放Model吗?

@Exodia
Copy link
Contributor

Exodia commented May 6, 2014

如果按照在 view 中添加 isFormDataChange 的方法来看,放在 model 会更方便,可以直接从 mode取原始数据判断。

@yanghuabei
Copy link
Member

initialFormData是数据,虽然加入到model中的方式怪异,但感觉放在Action下不大合适,model应该是最适合的去处吧

@otakustay
Copy link
Member Author

我觉得既然一开始初始数据是Action拿了存起来的,判断相等还是交给Action来做比较合适吧?让ViewAction不用相互知道对方干了啥

@yanghuabei
Copy link
Member

isFormDataChanged是否需要这点我也纠结,就两行代码,直接写到Action里也没问题,应该没有要重写判等规则的需求吧

@otakustay
Copy link
Member Author

我觉得是需要的,从一个系统的角度看我们是一致的,但不保证有些系统永远要有提示,有些系统永远不想有提示,因此从通用的角度来说是要有这方法的

甚至,这方法应该保持向后的行为一致,默认是返回false的,由我们业务系统中重写,以免其它项目升级依赖库后行为不一样了

@Exodia
Copy link
Contributor

Exodia commented May 6, 2014

丢给 Action 做数据变化判断也好,我看来数据相等的判断逻辑也属于业务相关,被重写的需求应该是有的

@yanghuabei
Copy link
Member

ok,那就提供isFormDataChanged方法,默认返回false

现在有个新的问题,目前的保存initialFormData的方法,当FormView中有与表单内容有关的子Action时,initBehavior中获取的initialFormData不是最终值,子Action中的input类型控件值获取不到。

@otakustay
Copy link
Member Author

关系到这个:ecomfe/er#74

所以这个issue要提前来完成吗?现在的情况是,我希望基础库中这个isFormDataChanged是默认直接返回false的,保持向后一致性,我们的项目来重写

那么这个控制在项目范围内,就是相对好办的,前期我们也没有复杂的表单,可以先忍一忍

@yanghuabei
Copy link
Member

要么先把计划中的issue完成,子Action相关问题先不处理,等ecomfe/er#74 完成之后再更新这个issue的实现?

@otakustay
Copy link
Member Author

OK我觉得不错

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants