流星 - 在哪里正确地计算方法

时间:2015-09-05 07:46:40

标签: javascript html meteor

我从1-2周开始阅读和观看有关Meteor的教程。我已经了解了如何构建有关服务器和客户端代码,帐户,安全性等的流星应用程序。 我无法弄清楚: 我在哪里正确地计算逻辑?

例如: 用户将数据放入表单中,数据保存在数据库中。根据这个输入数据,我希望通过放置数据来进行多次计算,比如大约20个方法的链接,最后显示一些结果。

目前我在Template.displayResults.helper所在的文件中包含了所有这些方法。 当我把它们放在另一个文件中时,它们不会得到识别,我认为是因为Meteor所附的包装。

示例:我有一系列DIY项目,每个项目都有一个字段,其中包含一系列项目所需的实用程序。

.item.thumb-right img{
  position: absolute !important;
  top: 10px !important;
  right: 20px !important;

  max-width: 80px !important;
  max-height: 80px !important;
  width: 100%  !important;
}

.item.thumb-centre img{
margin:0 auto;
  top: 10px !important;
  max-width: 80px !important;
  max-height: 80px !important;
  width: 100%  !important;
}

.item.item-thumbnail-left{
  margin-left: 20px !important;

}

我希望根据用户检查的实用程序显示所有可能的DIY项目。

用户界面有一组复选框,用户可以选择一堆他想要使用的实用工具。 这些值保存在集合中。

Projects = new Mongo.Collection('projects');

   /* 
   exampleProject = { 
        "name": "Kitchen table",
        "utilities": ["Hammer", "Glue"]
   }
   */

然后我想计算可能的项目......

Utilities = new Mongo.Collection('utilities');

    /* 
    exampleUtility = {
        "name": "Hammer",
        "checked": true
    }
    */

问题是:有更多的方法,如" projectsPossible"和" checkedCheckboxesList"。我在哪里用这些方法来获得一个好的结构?

提前致谢! VIN

2 个答案:

答案 0 :(得分:2)

如果您想注册全球帮助者,请使用Template.registerHelper(name, function),例如:

Template.registerHelper('projectsPossible', function() {
    var utilitiesCheckedDB = Utilities.find({
        checked: true
    }).fetch();
    var projectsAll = Projects.find().fetch();
    return projectsPossible(utilitiesCheckedDB, projectsAll);
});

如果要使函数projectsPossible(utilitiesCheckedDB, projectsAll)checkedCheckboxesList(checkedCheckboxesDB)可以从其他(客户端)文件访问,可以将它们设置为全局。例如:

projectsPossible = function(utilitiesCheckedDB, projectsAll) {
    var result = [];
    _.each(projectsAll, function(project) {
        if (project.utilities.length === _.intersection(project.utilities, checkedCheckboxesList(utilitiesCheckedDB)).length) {
            result.push(project);
        }
    });
    return result;
};

答案 1 :(得分:1)

您可以使用集合的transform选项创建模型类。有关ES5示例,请参阅文档:http://docs.meteor.com/#/full/mongo_collection

此外,您必须通过不使用var来使该模型类或函数全局化。

(function() {
  foo = function foo() {
    alert("fooh") 
  }
})()

在上面的示例中,没有foo =foo函数只能在其自己的文件中看到,因为包装器。