我正在尝试为标签&生成唯一ID输入对。
谷歌搜索后我现在知道,与把手不同,空格键中没有数组@index语法扩展(也有人知道为什么Blaze开发自过去5个月的版本0.1以来一直处于非活动状态?)。
所以我最终使用了受this blog post和其他帖子启发的JS Array .map()解决方案。但是,这个解决方案返回标签&输入对象,DOM在“分页”中通过Session显示为相同。
实例:http://meteorpad.com/pad/NXLtGXXD4yhYr9LHC
我做错了什么或错过了什么?
我还提出the code on github进行快速测试&细化:
答案 0 :(得分:1)
我通过查看ObserveSequence
source找到的解决方案似乎是为您生成的对象提供一个名为_id
的唯一字段(生成方式为{{questionId}}:{{questionIndex}}:{{choiceIndex}}
)。见这个meteorpad:http://meteorpad.com/pad/2EaLh8ZJncnqyejSr
我不太了解Meteor的内部原因,但是这个评论似乎很重要:
// 'lastSeqArray' contains the previous value of the sequence
// we're observing. It is an array of objects with '_id' and
// 'item' fields. 'item' is the element in the array, or the
// document in the cursor.
//
// '_id' is whichever of the following is relevant, unless it has
// already appeared -- in which case it's randomly generated.
//
// * if 'item' is an object:
// * an '_id' field, if present
// * otherwise, the index in the array
//
// * if 'item' is a number or string, use that value
//
// XXX this can be generalized by allowing {{#each}} to accept a
// general 'key' argument which could be a function, a dotted
// field name, or the special @index value.
当_id
不存在时,它会使用数组中的索引,所以我猜ObserveSequence
假设它是与更改字段相同的对象,而不是另一个对象,因此它重新使用旧元素,而不是摧毁它们并重新创建它们。我想选择名称_id
,以便它可以很好地处理由.fetch()
在Minimongo游标上生成的数组。
我不知道这是否是记录在案的行为,或者它是否会在将来发生变化。