占位符语法特性不完整
引言
Mock.js 语法分为两类,「模板」与「占位符」。模板语法的设计相较占位符更加简洁友好,但有一个缺陷即其语法限制了模板方式只能构造 key - value 形式的数据片段。相对的,占位符语法则更加严谨。在我的理解中,模板方式是占位符方式的简化,模板方式能构造的数据是占位符方式能构造的数据的子集。
问题
在现在的版本(1.5)中,所有使用模板语法能构造的数据片段都可以使用占位符方式构造,除了:
- 重复元素的数组:
"name|count": [{}, {} ...],"name|min-max": [{}, {} ...] - 重复内容的字符串:
"name|count": "value","name|min-max": "value"
这意味着,上面这些类型的数据片段,不能独立于 key(name) 单独存在。这导致在两种情况下现有的语法无法构建所需的数据:
-
该数据片段即为 JSON 根节点
[{}, {}, {}, ...]"★★★★★" -
该数据片断为数组元素
{ "array": [ [{}, {}, {}, ...] ... ] }{ "array": ["★★★", "★★★★★", ...] }
其中,「重复元素的数组作为 JSON 根节点」是 Restful API 风格对列表资源的约定,被广泛采用——这里有一个相关的 issue: #6——无法构建此类数据也是我目前真正遇到问题。其他情况在目前的实践中几乎不会遇到,在此提出是出于对占位符语法特性完整性的考虑。
提议
这里我冒昧提出一个可行的解决方案,即增加以下占位符语法:
Basics
["@ARRAY", item, count], ["@ARRAY", item, min, max]
["@ARRAY", {}, 3]
//=>
[{}, {}, {}]
值得指出的是,这里将占位符的形式从单纯的字符串扩展到了一个特定格式的对象。
Helpers
"@REPEAT('string', count)", "@REPEAT('string', min, max)"
{
"array|10": ["@REPEAT('★', 1, 5)"]
}
//=>
{
"array": ["★★★", "★★★★★", ...]
}
请问各位 maintainers 有任何想法或者建议吗?
#37
采纳。 会在这里 https://github.com/nuysoft/Mock/blob/refactoring/src/mock/handler.js#L77 实现。
质量好高的Issue!!!
这个实现了吗?
缓缓打出一个?