流星模板功能无法渲染

时间:2013-11-16 00:30:14

标签: meteor handlebars.js

我正在尝试在客户端上创建一个模板渲染;我想我尽可能地尝试了一切(除了显而易见的事情)。

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)

3 个答案:

答案 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