定义了两个流星本地集合和助手完全相同。一个助手工作。另一个没有

时间:2014-06-22 09:41:26

标签: meteor

我创建了这两个本地集合(代码实际上是一个接一个地写成,如下所示):

ShoppingCartCollection = new Meteor.Collection(null);
CurrentPricesCollection = new Meteor.Collection(null);

Template.myTemplate.rendered内部我将一些初始信息添加到这些集合中(同样,代码是一个接一个):

ShoppingCartCollection.insert({"sqft" : "not yet entered"});
CurrentPricesCollection.insert({"hdrPhotos" : 100}); 

我在helpers.js(一个接一个地定义)

中有这两个全球助手
Handlebars.registerHelper("shoppingCart", function() {
  return ShoppingCartCollection.findOne();
});

Handlebars.registerHelper("currentPrice", function() {
  return CurrentPricesCollection.findOne();
});

当我加载页面时,我立即在控制台中运行这些命令:

> ShoppingCartCollection.findOne();

Object {sqft: "not yet entered", _id: "xcNmqJvMqqD5j7wwn"}

> CurrentPricesCollection.findOne();

Object {hdrPhotos: 100, _id: "LP38E3MZgzuYjvSec"}

在我的模板中,我使用这些助手,但是......

{{currentPrice.hdrPhotos}} //displays nothing

{{shoppingCart.sqft}} //displays "not yet entered"

怎么......什么......?怎么会这样?是否有某些我可能会遗失的陷阱?某种我不知道的依赖或加载顺序?

1 个答案:

答案 0 :(得分:1)

您发布的代码在这里工作正常。

建议将此代码与您正在执行的操作的具体详细信息进行比较。另外,看 对于其他问题,拼写错误等。

以下是我使用的确切测试程序:

从无到有,在linux控制台:

meteor create sodebug

请注意,这将为" hello world"生成文件。类型程序。

检查版本:

meteor --version
Release 0.8.1.1

编辑sodebug / sodebug.js:

if (Meteor.isClient) {
  // code autogenerated by meteor create
  Template.hello.greeting = function () {
    return "Welcome to sodebug.";
  };

  Template.hello.events({
    'click input': function () {
      // template data, if any, is available in 'this'
      if (typeof console !== 'undefined')
        console.log("You pressed the button");
    }
  });
  // add your code here
    ShoppingCartCollection = new Meteor.Collection(null);
    CurrentPricesCollection = new Meteor.Collection(null);

    ShoppingCartCollection.insert({"sqft" : "not yet entered"});
    CurrentPricesCollection.insert({"hdrPhotos" : 100}); 
    Handlebars.registerHelper("shoppingCart", function() {
    return ShoppingCartCollection.findOne();
    });

    Handlebars.registerHelper("currentPrice", function() {
    return CurrentPricesCollection.findOne();
    });
}

if (Meteor.isServer) {
  Meteor.startup(function () {
    // code to run on server at startup
  });
}

修改sodebug.html:

<head>
  <title>sodebug</title>
</head>

<body>
  {{> hello}}
  {{> T1 }}
  {{> T2 }} 
</body>

<template name="T1">
<p>
{{shoppingCart.sqft}}
</p>
</template>
<template name="T2">
<p>
{{currentPrice.hdrPhotos}}
</p>
</template>
<template name="hello">
  <h1>Hello World!</h1>
  {{greeting}}
  <input type="button" value="Click" />
</template>

运行:meteor run

手动测试:

在localhost:3000

启动Chrome浏览器

检查Web浏览器控制台中的集合数据。 PASS

在网络浏览器屏幕上查看模板数据。 PASS

重新排序sodebug.html文件中的模板,检查网络浏览器屏幕。 PASS