ecomfe / ef

ef is a integration framework with er & esui
14 stars 15 forks source link

对应esui的valueParser升级进行的替换适配 #46

Closed bobshen closed 8 years ago

otakustay commented 8 years ago

看不懂为啥要加单引号,补充说明下

bobshen commented 8 years ago

@otakustay @Exodia

ESUI 新版本中,在main.js的init中,实现了一个新的 defaultValueParser 的方法。

主要是支持options的value能够区分 数字 还是 数字型字符串

例如 data-ui-value="@value" 与 data-ui-value="'@value'" 分别用于表示。

ESUI作为EF的上层,也意味着有了新的替换变量需求。

otakustay commented 8 years ago

但是我无法和你的逻辑对上,我理解这个defaultValueParser不应该涉及到任何@开头的值,因为@开头的值本来就是直接从Model中取得并且保留类型传给控件的,这个过程中不应该有任何的类型转换参与,如果需要类型转换早该在Model中完成

这个defaultValueParser应该用于非@的场景,如:

<!-- index是数字,text是字符串 -->
<esui-foo data-ui-index="123" data-ui-text="'123'"></esui-foo>

而如果这2个属性是@fooIndex@fooText,则应该在Model完成类型转换

bobshen commented 8 years ago

@value 这个不会是在esui需要考虑的,而是ef去感知。

就如同上述的例子,@fooText 是一个数字型的字符串,在模板中如果想使用

data-ui-value="@fooIndex"

@fooIndex  在Model中是以字符串的形式承载的话,那么如同所说,需要在 Modelprepare 阶段完成类型转换 string -> number

同时如果Model提交时需要是字符串,还会有再次转换的工作 number -> string

我大概理解esui的这些parser升级是为了区分数字表达的两种数据结构,减少实际使用场景对于数字类型的属性的进行前后转换的工作。

因此这边当初和yankun讨论时也是考虑到易用性,很多控件使用的数据都是经过Model组装的,较少地会直接写在模板中。不然的话,是否实际使用过程中这些工作其实并不能减少?

bobshen commented 8 years ago

另外有一个问题是与现在esui的实现有关。

某个属性如果在控件内部希望获取时是以字符串形式存储的数字,但是经过parser的转换,一定会变为数字,无法满足需求。这个属性可能来源于URL或者Model,经过Model的转变得到。

otakustay commented 8 years ago

无论在哪个框架中感知,所有@foo形式都应该保持Model中的属性类型交给控件,不能出现在Model中是类型A,在控件中是类型B的情况,这也是将来可能会做的数据绑定的前提要求,我不接受任何会导致@foo形式的属性在从Model中取出到控件中赋值的过程中类型产生变化的方案

所以ef需要做的应该是,当Model中是字符串类型时,加上单引号,这与现有代码的3个typeof判断不符,应该只需要处理typeofstring的情况才对

otakustay commented 8 years ago

esui的升级是用于解决HTML无法指定值类型这一缺陷的,但是@foo形式的传值是带有类型信息的,类型由Model决定,因此不应该让esui再做进一步的转换