gpt4 book ai didi

javascript - meteor :设计模式:为集合的每个字段(列)创建模板助手

转载 作者:行者123 更新时间:2023-11-28 08:18:45 24 4
gpt4 key购买 nike

使用 meteor js,我注意到如果我有这样的文件

{"q1":"someValue1","q2":"someValue2","q3":"someValue3","q4":"someValue4"}

我的 helper 常常会变成这样编辑:我最终重复创建每个字段的助手

Template.whatever.helpers({
gimmeResults1: function(){return myCollection.find({},{fields:{"q1":1}})},

gimmeResults2: function(){return myCollection.find({},{fields:{"q2":1}})}
});

以一种非常丑陋的方式对一个字段进行平均,例如

q1Avg: function () {
var count = myCollection.find({},{fields:{"q1":1}}).count();
var total = 0;
myCollection.find({},{fields:{"q1":1}}).map(function(doc) {
total += doc.q1;
});
return avg = (Math.round((total / count)*100))/100;
}

(使用变量仍然需要多个数据库查询,对吗?)

我应该使用某种设计模式来迭代文档的字段并自动创建模板助手吗?

还有哪些方法可以消除意大利面条式代码?

最佳答案

第一步可能如下所示:

getField = function(collection, field) {
var projection = {};
projection[field] = 1;
return collection.find({}, {fields: projection});
}
UI.registerHelper("getField", getField);

您可以在模板中调用它,例如 {{getField myCollection "q1"}},以及返回 myCollection 的帮助程序。您可以更进一步:

var makeFieldGetter = function(collection, field) {
return function() {
return getField(collection, field);
};
};

Template.whatever.helpers({
gimmeResults1: makeFieldGetter(myCollection, "q1")
gimmeResults2: makeFieldGetter(myCollection, "q2")
});

或者更进一步:

var makeFieldGetters = function(collection, fields) {
var obj = {};
fields.forEach(function(field) {
obj["gimme_" + field] = makeFieldGetter(collection, field);
});
return obj;
};

Template.whatever.helpers(makeFieldGetters(myCollection, ["q1", "q2"]));
// creates helpers gimme_q1, gimme_q2

关于javascript - meteor :设计模式:为集合的每个字段(列)创建模板助手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23265038/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com