У меня есть коллекция в Mongo, содержащая 2 элемента, я вижу их, когда включена автопубликация. Но когда я отключаю автопубликацию и добавляю код публикации и подписки, он больше не работает.
Это первый раз, когда я использую Meteor версии 1.7.0.5, раньше я всегда использовал 1.6, и у меня никогда не было проблем с публикацией / подпиской ...
Это такой простой тест, но что я делаю не так? У меня есть следующий код и файлы:
/client/xxx/xxx.html
<template name = "XxxTemplate">
{{#each xxxHelper}}
{{name}}<br>
{{/each}}
</template>
/collections/_Xxxx.js
import SimpleSchema from 'simpl-schema'
XxxCollection = new Meteor.Collection('XxxCollection');
XxxCollectionSchema = new SimpleSchema({
name: {
type: String,
label: "Name"
}
});
XxxCollection.attachSchema(XxxCollectionSchema);
/server/mongodb/publish.js
Meteor.publish('XxxCollection', function () {
return XxxCollection.find();
});
/client/xxx/xxx.js
Template.XxxTemplate.onCreated(function() {
Meteor.subscribe('XxxCollection');
});
Template.XxxTemplate.helpers({
xxxHelper: function() {
console.info("xxxHelper is called");
var r = XxxCollection.find();
console.info(r);
return r;
}
});
Мой файл package.json выглядит так:
{
"name":"TestApp",
"private":true,
"scripts":{
"start":"meteor run",
"test":"...",
"test-app":"...",
"visualize":"meteor --production --extra-packages bundle-visualizer"
},
"dependencies":{
"@babel/runtime":"7.0.0-beta.55",
"meteor-node-stubs":"^0.4.1",
"simpl-schema":"^1.5.3"
},
"meteor":{
"mainModule":{
"client":"client/main.js",
"server":"server/main.js"
},
"testModule":"tests/main.js"
}
}
спасибо за помощь, мой файл package.json выглядит так: { "name": "TestApp", "private": true, "scripts": { "start": "meteor run", "test": "...", "test-app": "...", "visualize": "meteor --production --extra-packages bundle-visualizer" }, "dependencies": { "@babel/runtime": "7.0.0-beta.55", "meteor-node-stubs": "^0.4.1", "simpl-schema": "^1.5.3" }, "meteor": { "mainModule": { "client": "client/main.js", "server": "server/main.js" }, "testModule": "tests/main.js" } }
@TomTem, пожалуйста, отредактируйте свой вопрос и добавьте туда записи package.js вместо того, чтобы помещать их в комментарий. Комментарии обычно нужны для разговора, в то время как область вопросов предоставляет гораздо лучшие возможности для форматирования и отображения фрагментов кода, чем комментарии.
Если вы хотите, чтобы ваш проект работал как в Meteor 1.6, вы должны необходимо удалить свойство mainModule из вашего package.json.
Объяснение:
Начиная с Метеор 1.7, новые проекты имеют ленивая загрузка включена по умолчанию даже вне папки import /.
Это делается с помощью свойства mainModule внутри файла package.json:
"mainModule": {
"client": "client/main.js",
"server": "server/main.js"
},
Если вы хотите использовать активную загрузку (отключите отложенную загрузку) вам нужно удалить свойство mainModule из вашего package.json.
В вашем случае проблема связана не с автопубликацией, а с включенной ленивой загрузкой.
Дополнительные ресурсы здесь:
Meteor Guide по использованию модулей ES:https://guide.meteor.com/structure.html#es2015-modules
Сообщение в блоге Meteor о версии 1.7:https://blog.meteor.com/meteor-1-7-and-the-evergreen-dream-a8c1270b0901
О боже, вот и все, спасибо! Я удалил весь раздел "метеор": {...}, и теперь он работает.
package.json
? Потому что, начиная с Meteor 1.7, есть разница в том, как загружается код.