我有一个辅助函数,它返回一个数组,而不是传统的 db.dbName.find() 游标。如何编写一个返回数组
,使其反射(reflect)为类似于由可在模板中使用的db.dbName.find()
生成的光标?
在下面找到我的辅助函数:
var arrayTest = Meteor.call('getUserCategoryArray', function(error, results){
if(error){
console.log(error.reason);
} else {
var results1 = results.toString();
var results2 = results1.split(",");
alert("Array content: " +results2);
alert(results2[0]);
alert(results2[1]);
alert(results2[2]);
return results2;
}
})
解释部分代码:从上到下:警报成功打印出来:
Array content: shoes,clothes,watches
shoes
clothes
watches
该警报只是为了确认 results2 是一个工作数组。
现在,如何对返回值/数组进行编码,以便能够在模板中使用它,就好像它是由 db.dbName.find()
查询返回的游标一样?
感谢您的帮助。
最佳答案
您的问题与数组无关,而是关于同步与异步编程。正如 @mutdmour 提到的,空格键可以很好地处理来自助手的数组。
在渲染模板时,助手可能会被多次调用,因此它不应该执行任何异步操作或产生任何副作用。您的助手正在进行异步调用,因此这是一个立即出现的问题。
您看到的问题是这样的调用是异步的,而助手需要同步。所以你很难让你的助手按原样工作。
在许多情况下,助手返回集合的内容,或返回指向集合内容的游标。我不了解您的应用程序,但是带有集合内容的发布/订阅是更好的选择吗?
如果不是,并且它必须是方法调用的结果,那么通常我会:
- 在 onCreated() 中进行调用
- 将结果写入响应式变量
- 从助手返回响应式变量
例如
Template.Foo.onCreated(function() {
let self = this;
self.clothing = new ReactiveVar();
Meteor.call('getUserCategoryArray', function(error, results) {
if (!error) {
// or whatever you need to do to get the results into an array
self.clothing.set(results);
}
});
});
Template.Foo.helpers({
clothing() {
return Template.instance().clothing.get();
}
});
关于javascript - 如何返回数组/值作为可以在模板中使用的光标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42367161/