Simple Meteor (1.7.0.5) publish/subscribe 无法收集
Simple Meteor (1.7.0.5) publish/subscribe to collection doesnt work
我在 Mongo 中有一个包含 2 个项目的集合,我在启用自动发布时看到它们。但是当我禁用自动发布,并且当我添加发布和订阅代码时,它就不再起作用了。
这是我第一次使用 Meteor 版本 1.7.0.5,之前我一直使用 1.6,而且我从来没有遇到任何问题 publish/subscribe ...
这是一个如此简单的测试,但我做错了什么?我有以下代码和文件:
/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.log("xxxHelper is called");
var r = XxxCollection.find();
console.log(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"
}
}
如果您希望您的项目像在 Meteor 1.6 中一样工作,您必须从您的 package.json.[=13= 中删除 mainModule 属性 ]
解释:
从 Meteor 1.7 开始,新项目 默认启用延迟加载 甚至在 imports/ 文件夹之外。
这是由 package.json 文件中的 属性 mainModule 制作的:
"mainModule": {
"client": "client/main.js",
"server": "server/main.js"
},
如果您想使用预先加载(禁用延迟加载)您必须从您的 package.json 中删除 mainModule 属性。
在你的情况下,问题不是来自自动发布,而是来自启用的延迟加载。
这里有更多资源:
Meteor ES 模块使用指南: https://guide.meteor.com/structure.html#es2015-modules
流星博客Post约1.7:https://blog.meteor.com/meteor-1-7-and-the-evergreen-dream-a8c1270b0901
我在 Mongo 中有一个包含 2 个项目的集合,我在启用自动发布时看到它们。但是当我禁用自动发布,并且当我添加发布和订阅代码时,它就不再起作用了。
这是我第一次使用 Meteor 版本 1.7.0.5,之前我一直使用 1.6,而且我从来没有遇到任何问题 publish/subscribe ...
这是一个如此简单的测试,但我做错了什么?我有以下代码和文件:
/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.log("xxxHelper is called");
var r = XxxCollection.find();
console.log(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"
}
}
如果您希望您的项目像在 Meteor 1.6 中一样工作,您必须从您的 package.json.[=13= 中删除 mainModule 属性 ]
解释:
从 Meteor 1.7 开始,新项目 默认启用延迟加载 甚至在 imports/ 文件夹之外。
这是由 package.json 文件中的 属性 mainModule 制作的:
"mainModule": {
"client": "client/main.js",
"server": "server/main.js"
},
如果您想使用预先加载(禁用延迟加载)您必须从您的 package.json 中删除 mainModule 属性。
在你的情况下,问题不是来自自动发布,而是来自启用的延迟加载。
这里有更多资源:
Meteor ES 模块使用指南: https://guide.meteor.com/structure.html#es2015-modules
流星博客Post约1.7:https://blog.meteor.com/meteor-1-7-and-the-evergreen-dream-a8c1270b0901