Определены две локальные коллекции meteor и помощники точно такие же. Один помощник работает. У другого нет

#meteor

#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. Являются ли эти два вспомогательных вызова также рядом друг с другом?

2. Ага. Бок о бок. Тот же шаблон.

3. Здесь все работает нормально, будут публиковаться точные файлы.

4. обратный порядок шаблонов, ничего не изменилось.

5. Grrrr… Я перезапустил свой сервер meteor. То же самое. Я попытаюсь выполнить сброс.

Ответ №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

Ручные тесты:

Запустите браузер chromium на localhost: 3000

Проверьте консоль веб-браузера на наличие данных коллекций. ПЕРЕДАТЬ

Проверьте данные шаблонов на экране веб-браузера. ПЕРЕДАТЬ

Измените порядок шаблонов в sodebug.html файле, проверьте экран веб-браузера. ПЕРЕДАТЬ

Комментарии:

1. Хорошо, я думаю, я знаю, что происходит. helpers.js внутри моей client папки отличается от моей helpers.js внутри скрытой .meteor папки. Проблема, однако, в том, что если я удалю helpers.js внутреннюю скрытую папку, а затем сделаю meteor rebuild-all это, она продолжит перестраивать старую, несинхронизированную helpers.js внутри скрытой папки. Эта старая версия внутри .meteor не включает глобальные помощники, которые я определил в OP. Meteor 0.8.1.3. Но как он вообще узнает, что нужно перестроить старую версию??? Откуда вообще берутся инструкции по перестройке старой версии?

2. Уххх… Я закрыл свой текстовый редактор (Sublime), чтобы убедиться, что он не блокирует какие-либо файлы. Я выполнил еще одну перестройку, и на этот раз, похоже, все вернулось к норме. Все еще не объясняет, как Meteor находил информацию для восстановления старой версии helpers.js though.