Closed bobshen closed 8 years ago
@otakustay @Exodia
ESUI 新版本中,在main.js
的init中,实现了一个新的 defaultValueParser
的方法。
主要是支持options的value能够区分 数字
还是 数字型字符串
。
例如 data-ui-value="@value" 与 data-ui-value="'@value'" 分别用于表示。
ESUI作为EF的上层,也意味着有了新的替换变量需求。
但是我无法和你的逻辑对上,我理解这个defaultValueParser
不应该涉及到任何@
开头的值,因为@
开头的值本来就是直接从Model
中取得并且保留类型传给控件的,这个过程中不应该有任何的类型转换参与,如果需要类型转换早该在Model
中完成
这个defaultValueParser
应该用于非@
的场景,如:
<!-- index是数字,text是字符串 -->
<esui-foo data-ui-index="123" data-ui-text="'123'"></esui-foo>
而如果这2个属性是@fooIndex
和@fooText
,则应该在Model
完成类型转换
@value
这个不会是在esui
需要考虑的,而是ef
去感知。
就如同上述的例子,@fooText
是一个数字型的字符串,在模板中如果想使用
data-ui-value="@fooIndex"
@fooIndex
在Model
中是以字符串的形式承载的话,那么如同所说,需要在 Model
中prepare
阶段完成类型转换 string -> number
。
同时如果Model提交时需要是字符串,还会有再次转换的工作 number -> string
。
我大概理解esui的这些parser升级是为了区分数字表达的两种数据结构,减少实际使用场景对于数字类型的属性的进行前后转换的工作。
因此这边当初和yankun讨论时也是考虑到易用性,很多控件使用的数据都是经过Model组装的,较少地会直接写在模板中。不然的话,是否实际使用过程中这些工作其实并不能减少?
另外有一个问题是与现在esui
的实现有关。
某个属性如果在控件内部希望获取时是以字符串形式存储的数字,但是经过parser的转换,一定会变为数字,无法满足需求。这个属性可能来源于URL或者Model,经过Model的转变得到。
无论在哪个框架中感知,所有@foo
形式都应该保持Model中的属性类型交给控件,不能出现在Model中是类型A,在控件中是类型B的情况,这也是将来可能会做的数据绑定的前提要求,我不接受任何会导致@foo
形式的属性在从Model
中取出到控件中赋值的过程中类型产生变化的方案
所以ef
需要做的应该是,当Model
中是字符串类型时,加上单引号,这与现有代码的3个typeof
判断不符,应该只需要处理typeof
为string
的情况才对
esui的升级是用于解决HTML无法指定值类型这一缺陷的,但是@foo
形式的传值是带有类型信息的,类型由Model决定,因此不应该让esui再做进一步的转换
看不懂为啥要加单引号,补充说明下