我从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
答案 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
函数只能在其自己的文件中看到,因为包装器。