2015-09-05 56 views
0

我從1-2周開始閱讀和觀看有關流星的教程。我已經瞭解瞭如何構建關於服務器和客戶端代碼,帳戶,安全等的流星應用程序。 我無法弄清楚: 我在哪裏正確計算邏輯?流星 - 在哪裏正確計算方法

例如: 用戶將數據的形式,並將數據保存在數據庫中。根據這個輸入數據,我想通過放置數據來做幾次計算,讓我們說大約20個方法的鏈接,最後顯示一些結果。

目前,我都在Template.displayResults.helper是裏面的文件,這些方法。 當我把它們放在另一個文件中時,它們沒有被識別,我想是因爲流星放置的包裝。


例子:我有DIY項目的集合,每個項目有一個字段與那些有neccessary該項目公用事業的數組。

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的

+1

能否請您提供一個[小例子(http://stackoverflow.com/help/mcve)能重現問題(或者至少將代碼添加到您的問題)? –

+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

你可以讓模型類,利用館藏transform選項。有關ES5的示例,請參閱文檔:http://docs.meteor.com/#/full/mongo_collection

另外,您必須通過不使用var來使該模型類或函數具有全局性。

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

在上面的例子中,沒有foo =foo功能就只能是可見它自己的文件裏,因爲包裝的。