Это было долгое время с тех пор, как я использовал Метеор или пробовал в мире пользовательского интерфейса, так что простите меня, если это плохой вопрос.Meteor 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 all() в функцию запуска клиента
Так что теперь это похоже на работу.
Исходный вопрос теперь меняется - Почему find(). Fetch() возвращает пустой массив?
Возможно, я должен опубликовать новый вопрос и отметить этот как фиксированный?
У меня проблема с запахом. В вашем последнем примере кода 'console.log()' выполняет * немедленно * после 'Meteor.call()'. Это означает, что он выполняется задолго до того, как функция 'function (error, results) {}' callback будет запущена. Попробуйте перевести журнал в обратный вызов. – Tomalak
Спасибо за предложение. Это похоже на проблему с синхронизацией, поэтому я попытался переместить Meteor.call() в событие onCreated, но все равно не повезло. Я также пробовал подписку и другие вещи, но до сих пор нет радости. – Exie
Вы использовали 'Meteor.publish()' ваши две коллекции на сервере? –