2016-08-24 66 views
0

自從我使用Meteor或涉獵UI世界以來,這已經很長時間了,所以如果這是一個糟糕的問題,請原諒我。流星JS - 客戶端集合似乎是空的

API/main.js:

export const Nodes = new Meteor.Collection("nodes"); 
export const Links = new Meteor.Collection("links"); 

服務器/ main.js

import { Links, Nodes } from '../api/main.js'; 

Meteor.startup(() => { 
    // code to run on server at startup 
} 

Meteor.methods({ 
    traverseDocument: function traverseDocument(documentKey) { 
    // ... do stuff ... 
    Links.insert(data.links); 
    Nodes.insert(data.nodes); 
    return data; 
    } 
} 

客戶端/ main.js

import { Links, Nodes } from '../api/main.js'; 
import './main.html'; 

Meteor.startup(function() { 
    // Fetch data via a call 
    Meteor.call("traverseDocument", 'NTD000000228506', function (error, results) {}); 
}); 

Template.viz.rendered = function() { 
    console.log(Nodes.find());     // <-- LocalConnection.Cursor() 
    console.log(Nodes.find().fetch());   // <-- This is empty [] 
    console.log(Nodes._collection._docs._map); // <-- This returns Object{} 
} 

我已經試過: 1.發佈/訂閱 2.我試了一個幫手功能 3.我已經把Meteor.C所有()進入客戶端啓動功能

所以這現在似乎更接近工作。

原來的問題現在改變爲 - 爲什麼find()。fetch()返回一個空數組?

也許我應該發佈一個新問題並將其標記爲已修復?

+0

我嗅到計時問題。在你最後的代碼示例中,'console.log()'在Meteor.call()後執行* immediate *。這意味着它在函數(error,result){}'回調甚至會運行很久之前就會執行。嘗試將日誌記錄移入回調。 – Tomalak

+0

感謝您的建議。它看起來像是一個計時問題,所以我嘗試將Meteor.call()移動到onCreated事件中,但仍然沒有運氣。我也嘗試訂閱和其他的東西,但仍然沒有喜悅。 – Exie

+0

你是否在服務器上有Meteor.publish()'你的兩個集合? –

回答

1

您可以將回調結果的值保存到會話變量或無功變量中,然後再進行檢索。

import { Links, Nodes } from '../api/main.js'; 
import './main.html'; 

Template.viz.rendered = function() { 
    Meteor.call("traverseDocument", 'VALUE001', function (error, results) { 
    if(error) { 
     // handle error 
    } 
    else { 
    Session.set('result',results); // save result in session or reactive  variable 
    } 
    console.log(Nodes); // <-- This works, has data 
    }); 

    if(Session.get('result') { 
    console.log(Session.get('result')); // <-- Retrieve value from session or reactive var 
} 
} 
+0

經過一番周折後,這現在很好,乾淨!非常感謝。 – Exie