2013-06-06 42 views
0

我試圖創建一個類似於這裏看到的反應陣列(How can I make a reactive array from a Meteor collection?),但解決方案沒有按預期工作。如何在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()的執行方式。

回答

0

使用Session

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

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

感謝您的指針,Akshat。 Session看起來像是我需要進入的方向,而這個建議確實可以在Template.myList.test中存儲和檢索正確的數組。但是,當我通過'Template.myList.test'來源時,它不會採取反應行動。 – IanWhalen

1

如果你想要一個陣列是被動的,你或許應該使用一個流星集合。對數組的無效更新非常低效,因爲整個數組隨着對單個元素的更改而改變。

然而,一般來說,Meteor中的自動完成解決方案不應該像傳統代碼那樣依賴於靜態數組。我鼓勵你去嘗試的是建立專門的流星集合頂我的流星感知自動完成包裝:

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

相關問題