2013-06-28 27 views
0

我有一個簡單的編輯窗體模板。要編輯的文檔的_id帶有會話變量(由URL:http://example.com/items/4zt4z3t3t設置爲mini-pages)。在Template.editForm.created函數中,我嘗試使用ItemCollection.findOne({_id:_id})從集合中獲取相應的文檔。在所有情況下,_id都設置正確。Collection.findOne()不返回Template.created中的任何結果

當我導航到http://example.com/4zt4z3t3t並調試created函數時,ItemCollection.findOne()返回未定義,儘管集合中有項目。因此我永遠無法通過_id找到我的物品。另外,當我將項目查找過程移到路由階段時,查找也沒有結果。後來,該集團按預期工作。

任何指針?

+0

我做了一些更多的分析:當我直接調用URL(而不是通過Meteor.go)時,「迷你頁面」似乎將該頁面調用兩次。集合第一次未定義。似乎是迷你頁面的問題。 – wackazong

回答

0

流星使用Data on the wire原則。這意味着當您的HTML加載數據時不會與它一起發送,至少在初始階段。

因此,您不能訪問.created函數中的數據,除非您希望在下載數據之後加載模板。這就是它最初返回undefined的原因,但如果您稍後再檢查它的話。

您也可以等待數據完成時訂閱的回調,然後加載模板。

OR

使用反應性在你的模板,並讓它加載空,並自動填充數據起來的時候,數據已經來到了(真是最容易)。在模板中訪問您的數據,並使用車把幫手填寫數據,並使用.rendered回調在之後進行任何更改。

+0

我去了第二個解決方案,並使用了一個幫助器,它在模板中實際需要時執行findOne。 不過,當我加載URL時,我得到一個快速閃爍的空表單,然後是帶有數據的表單。我認爲這是迷你頁面加載頁面兩次的問題。 – wackazong