0

我正在尝试创建一个类似于此处看到的反应数组(如何从 Meteor 集合中制作反应数组?),但解决方案没有按预期工作。

下面的代码创建了一个数组并正确更新它,但是对 'foo' 集合的任何后续更新都不会被 typeahead 看到。我也尝试过使用 jquery-ui 自动完成,但结果相同。

@Coll = new Meteor.Collection "foo"

if Meteor.isClient
  Template.myForm.rendered = ->
    Meteor.defer ->
      $('.inputs').typeahead
        source: Template.myList.test()

  Meteor.autorun ->
    Template.myList.test = ->
      _(Coll.find().fetch()).pluck "Name"

我猜这个问题与我依赖相当老套的“Template.myList.test”来存储数组这一事实有关。我尝试使用以下内容:

Meteor.autorun ->
  test = _(Coll.find().fetch()).pluck "Name"

但预输入无法找到“测试”。

因此,这里的解决方案可能是更改我存储数组的方式,而不是更改 find() 的执行方式。

4

2 回答 2

1

如果您希望数组具有反应性,您可能应该使用 Meteor 集合。对数组的响应式更新非常低效,因为整个数组会随着单个元素的更改而改变。

然而,一般来说,Meteor 中的自动完成解决方案不应该像传统代码那样依赖于静态数组。我鼓励您尝试我的 Meteor-aware 自动完成包,它专门构建在流星集合之上:

https://github.com/mizzao/meteor-autocomplete

于 2013-10-11T13:41:21.460 回答
0

使用会话

Meteor.autorun ->
  Session.set 'test', _(Coll.find().fetch()).pluck "Name"

Template.myList.test = ->
  Session.get 'test'
于 2013-06-06T08:20:39.150 回答