Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 流星-在哪里放置正确的计算方法_Javascript_Html_Meteor - Fatal编程技术网

Javascript 流星-在哪里放置正确的计算方法

Javascript 流星-在哪里放置正确的计算方法,javascript,html,meteor,Javascript,Html,Meteor,我从1-2周开始阅读和观看有关流星的教程。我已经了解了如何构建meteor应用程序,包括服务器端和客户端代码、帐户、安全性等。 我不明白的是: 我应该把计算逻辑正确地放在哪里 例如: 用户将数据放入表单中,数据保存在数据库中。根据这些输入数据,我想通过将数据放入一个大约20个方法的链接来进行一些计算,最后显示一些结果 目前,我在Template.displayResults.helper所在的文件中有所有这些方法。 当我把它们放在另一个文件中时,它们不会被识别,我想是因为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;
};
能否请您提供一个重现问题(或至少为您的问题添加代码)?能否请您提供一个重现问题(或至少为您的问题添加代码)?能否请您提供一个重现问题(或至少为您的问题添加代码)?能否请您提供一个重现问题的(或者至少为您的问题添加代码)?