Я пытаюсь отобразить данные из коллекции, используя Blaze. У меня есть такая коллекция:
TestsCollection.js
* * 1004
import { Mongo } from 'meteor/mongo';
import { Factory } from 'meteor/dburles:factory';
import SimpleSchema from 'simpl-schema';
class TestsCollection extends Mongo.Collection {
constructor(collectionName){
super(collectionName);
console.log('created');
}
insert(doc, callback) {
const ourDoc = doc;
ourDoc.testField = new Buffer([0,1,2]);
const result = super.insert(ourDoc, callback);
return result;
}
}
export const Tests = new TestsCollection ('tests');
Tests.schema = new SimpleSchema({
name: {
type: String,
max: 512,
required: true,
},
text: {
type: String,
max: 512,
required: true
},
testField: {
type: Buffer,
max: 512,
required: true
}
});
Tests.attachSchema(Tests.schema);
publication.js
import { Meteor } from 'meteor/meteor';
import { Tests } from '../tests';
Meteor.publish('tests', function () {
return Tests.find({});
});
и я импортировал оба файла в server / main.js:
import '/imports/api/tests'
import '/imports/api/server/publications'
Хорошо, теперь я хочу отобразить эту коллекцию в своем шаблоне клиента. Я уже добавил тестовые данные, поэтому я делаю:
test_Tmp.html
<template name='test_Tmp'>
<h3>This is test page #1</h3>
<table>
<tr>
<th>name</th>
<th>info</th>
</tr>
{{#each getTests}}
<tr>
<td>{{name}}</td>
<td>{{text}}</td>
</tr>
{{/each}}
</table>
</template>
test_Tmp.js
import './test_Tmp.html'
import { Mongo } from "meteor/mongo";
const Tests = new Mongo.Collection('tests');
Template.test_Tmp.onCreated(function() {
this.autorun(() => {
this.subscribe('tests');
});
});
Template.test_Tmp.onRendered(function onRendered() {
//do some stuff
});
Template.test_Tmp.helpers({
getTests(){
var data = Tests.find({});
data = data.fetch();
console.log(data);
return data;
}
});
Когда я загружаю тестовую страницу, которая отображает шаблон test_Tmp
(я использую потоковый маршрутизатор). я получаю только это:
Это тестовая страница № 1
название
А стол пуст. Помощник в моем клиентском шаблоне:
data = data.fetch();
console.log(data);`
по какой-то причине возвращает пустой массив. Если я удаляю fetch
и выполняю console.log(data);
, я могу видеть полную информацию о коллекции с картой _docs
всех тестовых данных, которые я вставил. Но если я удаляю fetch
, все равно возвращаемые данные не отображаются, таблица пуста. Как я могу получить данные из коллекции на клиенте, тогда нужно, чтобы коллекция реагировала, любое изменение сервера должно вызывать изменение коллекции на стороне клиента