我正在尝试在客户端上创建一个模板渲染;我想我尽可能地尝试了一切(除了显而易见的事情)。
HTML:
<head>
<title>Groups</title>
</head>
<body>
{{loginButtons}}
{{>TplGroups}}
</body>
<template name="TplGroups">
groups found: {{ GroupCount }}
{{#each GetAllGroups}}
<div> hello, {{name}} group! </div>
{{/each}}
</template>
serverStartup.js:
if (Meteor.isServer) {
Meteor.startup(function () {
// code to run on server at startup
Meteor.publish("GroupCount"), function()
{
return Groups.find({});
}
});
}
和Groups.js集合公开了我想在客户端访问的两个方法GroupCount和GetAllGroups:
var Groups = new Meteor.Collection("groups");
Groups.insert({name: "John"});
if(Meteor.is_client)
{
Meteor.subscribe("GetAllGroups");
Meteor.subscribe("GroupCount");
Template.TplGroup.GetAllGroups = function()
{
return Groups.find({});
}
Template.TplGroup.GroupCount = function()
{
return Groups.find().count();
}
}
我删除了“不安全”和“自动发布”包。 我的错误在哪里?这两个功能不会在客户端上显示。
将函数声明为“发布”或将其声明为模板函数之间的区别是什么?
在浏览器控制台中我得到了这个:
不推荐使用event.returnValue。请改用标准的event.preventDefault()。 (的jquery.js)
答案 0 :(得分:0)
发布方法应该看起来或多或少像这样
Meteor.publish("GetAllGroups", function () {
return Groups.find({});
});
答案 1 :(得分:0)
@apendua指出了正确的解决方案。我拿了你的代码并重构它以使解决方案更清晰:
server.js:
if (Meteor.isServer) {
// Publish groups
Meteor.publish('groups', function() {
return Groups.find();
});
}
groups.js
Groups = new Meteor.Collection('groups');
Groups.insert({name: 'John'});
if (Meteor.isClient) {
// Subscribe to groups
Meteor.subscribe('groups');
Template.TplGroup.GetAllGroups = function() {
return Groups.find();
}
Template.TplGroup.GroupCount = function() {
return Groups.find().count();
}
}
仅发布群组就足够了。在您的groups.js中,您尝试订阅不存在的发布(GetAllGroups)。最好只发布和订阅简单的“组”并返回如上所述的组计数。使用较新版本的流星时,您应使用Meteor.isClient
而不是Meteor.is_client
。
由于Meteor和/或jQuery本身的某些问题,您描述的jQuery错误与您的代码无关并且出现(至少我认为)。别担心。
答案 2 :(得分:0)
你刚刚忘记了js文件中模板名称中的“s”:
<template name="TplGroups"> <!-- what you wrote -->
在你的js中你写道:
Template.TplGroup.xxx
而不是:
Template.TplGroups.xxx