Javascript 流星-在哪里放置正确的计算方法
我从1-2周开始阅读和观看有关流星的教程。我已经了解了如何构建meteor应用程序,包括服务器端和客户端代码、帐户、安全性等。 我不明白的是: 我应该把计算逻辑正确地放在哪里 例如: 用户将数据放入表单中,数据保存在数据库中。根据这些输入数据,我想通过将数据放入一个大约20个方法的链接来进行一些计算,最后显示一些结果 目前,我在Template.displayResults.helper所在的文件中有所有这些方法。 当我把它们放在另一个文件中时,它们不会被识别,我想是因为Meteor放的包装纸Javascript 流星-在哪里放置正确的计算方法,javascript,html,meteor,Javascript,Html,Meteor,我从1-2周开始阅读和观看有关流星的教程。我已经了解了如何构建meteor应用程序,包括服务器端和客户端代码、帐户、安全性等。 我不明白的是: 我应该把计算逻辑正确地放在哪里 例如: 用户将数据放入表单中,数据保存在数据库中。根据这些输入数据,我想通过将数据放入一个大约20个方法的链接来进行一些计算,最后显示一些结果 目前,我在Template.displayResults.helper所在的文件中有所有这些方法。 当我把它们放在另一个文件中时,它们不会被识别,我想是因为Meteor放的包装纸
示例:我有一组DIY项目,每个项目都有一个字段,其中包含项目所需的一系列实用程序
Projects = new Mongo.Collection('projects');
/*
exampleProject = {
"name": "Kitchen table",
"utilities": ["Hammer", "Glue"]
}
*/
我想显示所有可能的DIY项目,具体取决于用户选中的实用程序
UI有一组复选框,用户可以通过这些复选框选择他想要使用的一组实用程序。
这些值保存在集合中
Utilities = new Mongo.Collection('utilities');
/*
exampleUtility = {
"name": "Hammer",
"checked": true
}
*/
然后我想计算可能的项目
Template.displayResults.helpers({
projectsPossible: function () {
var utilitiesCheckedDB = Utilities.find({
checked: true
}).fetch();
var projectsAll = Projects.find().fetch();
return projectsPossible(utilitiesCheckedDB, projectsAll);
}
});
// Returns an array of all possible projects depending on the selected utilities
function projectsPossible(utilitiesCheckedDB, projectsAll) {
var result = [];
_.each(projectsAll, function (project) {
if (project.utilities.length === _.intersection(project.utilities, checkedCheckboxesList(utilitiesCheckedDB)).length) {
result.push(project);
}
});
return result;
}
// Returns an array of all checked utilities in the current checkbox database
function checkedCheckboxesList(checkedCheckboxesDB) {
var result = [];
_.each(checkedCheckboxesDB, function (checkbox) {
result.push(checkbox.name);
});
return result;
}
问题是:有更多的方法,如“projectsPossible”和“checkedCheckboxesList”。我应该把这些方法放在哪里才能得到一个好的结构
提前谢谢!
Vin您可以使用集合的
transform
选项创建模型类。有关ES5示例,请参阅文档:
此外,您必须通过不使用var
使该模型类或函数成为全局的
(function() {
foo = function foo() {
alert("fooh")
}
})()
在上面的示例中,如果没有
foo=
,由于包装器的存在,foo
函数只能在其自己的文件中可见。您可以使用集合的transform
选项创建模型类。有关ES5示例,请参阅文档:
此外,您必须通过不使用var
使该模型类或函数成为全局的
(function() {
foo = function foo() {
alert("fooh")
}
})()
在上面的示例中,如果没有
foo=
,由于包装器的存在,foo
函数只能在其自己的文件中可见。您可以使用集合的transform
选项创建模型类。有关ES5示例,请参阅文档:
此外,您必须通过不使用var
使该模型类或函数成为全局的
(function() {
foo = function foo() {
alert("fooh")
}
})()
在上面的示例中,如果没有
foo=
,由于包装器的存在,foo
函数只能在其自己的文件中可见。您可以使用集合的transform
选项创建模型类。有关ES5示例,请参阅文档:
此外,您必须通过不使用var
使该模型类或函数成为全局的
(function() {
foo = function foo() {
alert("fooh")
}
})()
在上面的示例中,如果没有
foo=
,由于包装器的原因,foo
函数只能在其自己的文件中可见。如果要注册全局帮助程序,只需使用,例如:
Template.registerHelper('projectsPossible', function() {
var utilitiesCheckedDB = Utilities.find({
checked: true
}).fetch();
var projectsAll = Projects.find().fetch();
return projectsPossible(utilitiesCheckedDB, projectsAll);
});
如果要使函数projectsPossible(实用程序CheckedDB,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;
};
如果要注册全局帮助程序,只需使用,例如:
Template.registerHelper('projectsPossible', function() {
var utilitiesCheckedDB = Utilities.find({
checked: true
}).fetch();
var projectsAll = Projects.find().fetch();
return projectsPossible(utilitiesCheckedDB, projectsAll);
});
如果要使函数projectsPossible(实用程序CheckedDB,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;
};
如果要注册全局帮助程序,只需使用,例如:
Template.registerHelper('projectsPossible', function() {
var utilitiesCheckedDB = Utilities.find({
checked: true
}).fetch();
var projectsAll = Projects.find().fetch();
return projectsPossible(utilitiesCheckedDB, projectsAll);
});
如果要使函数projectsPossible(实用程序CheckedDB,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;
};
如果要注册全局帮助程序,只需使用,例如:
Template.registerHelper('projectsPossible', function() {
var utilitiesCheckedDB = Utilities.find({
checked: true
}).fetch();
var projectsAll = Projects.find().fetch();
return projectsPossible(utilitiesCheckedDB, projectsAll);
});
如果要使函数projectsPossible(实用程序CheckedDB,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;
};
能否请您提供一个重现问题(或至少为您的问题添加代码)?能否请您提供一个重现问题(或至少为您的问题添加代码)?能否请您提供一个重现问题(或至少为您的问题添加代码)?能否请您提供一个重现问题的(或者至少为您的问题添加代码)?