标签输入对的唯一ID

时间:2014-10-14 10:46:23

标签: meteor

我正在尝试为标签&生成唯一ID输入对。

谷歌搜索后我现在知道,与把手不同,空格键中没有数组@index语法扩展(也有人知道为什么Blaze开发自过去5个月的版本0.1以来一直处于非活动状态?)。

所以我最终使用了受this blog post和其他帖子启发的JS Array .map()解决方案。但是,这个解决方案返回标签&输入对象,DOM在“分页”中通过Session显示为相同。

实例:http://meteorpad.com/pad/NXLtGXXD4yhYr9LHC

  • 点击第一组“非索引ID”复选框,然后单击下一个/上一个,DOM将正确显示一组新复选框。
  • 但是,点击下面的第二组“索引ID”复选框,然后单击下一个/上一个,DOM似乎保留相同的复选框,因为在上一页中选择的一个仍在下一页上检查。

我做错了什么或错过了什么?

我还提出the code on github进行快速测试&细化:

1 个答案:

答案 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游标上生成的数组。

我不知道这是否是记录在案的行为,或者它是否会在将来发生变化。