我正在尝试创建一个类似于此处所见的反应式数组(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()的执行方式。
答案 0 :(得分:1)
如果您希望阵列具有反应性,则应该使用Meteor集合。对数组的反应性更新非常低效,因为整个数组会随着对单个元素的更改而改变。
但一般情况下,Meteor中的自动完成解决方案不应依赖于传统代码中的静态数组。我鼓励你试试我的Meteor-aware自动完成软件包,它是专门在流星集合之上构建的:
答案 1 :(得分:0)
使用Session
Meteor.autorun ->
Session.set 'test', _(Coll.find().fetch()).pluck "Name"
Template.myList.test = ->
Session.get 'test'