如何在Meteor中传递客户端上下文中的响应数组?

时间:2013-06-06 02:40:46

标签: javascript coffeescript meteor

我正在尝试创建一个类似于此处所见的反应式数组(How can I make a reactive array from a Meteor collection?),但解决方案无法按预期工作。

下面的代码会创建一个数组并对其进行正确更新,但是对于'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"

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

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

但是先行者无法找到“测试”。

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

2 个答案:

答案 0 :(得分:1)

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

但一般情况下,Meteor中的自动完成解决方案不应依赖于传统代码中的静态数组。我鼓励你试试我的Meteor-aware自动完成软件包,它是专门在流星集合之上构建的:

  

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

答案 1 :(得分:0)

使用Session

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

Template.myList.test = ->
  Session.get 'test'