我的meteor app访问Parse.com以提取并显示数据。 我开始将parse.com javascript查询直接集成到模板的渲染函数中,该函数运行良好。
现在,我想在帮助器中使用Parse.com查询将其传递给存在于我的模板中的meteor {{#each}}循环。
Template.dashboard.helpers({
app: function () {
//init new array
var appsArr = [];
//Create a Parse Query for Post objects
var query = new Parse.Query("Apps");
query.descending("createdAt");
var appsObj = {};
query.find({
success: function(results) {
// Add the returned Parse.Object values to appsArr
for (var i = 0; i < results.length; i++) {
appsObj = {};
appsObj.obid = results[i].id;
appsObj.title = results[i].attributes.title;
appsObj.screenshot1 = results[i].attributes.screenshot1._url;
appsObj.appIcon = results[i].attributes.appIcon._url;
appsArr.push(appsObj);
}
},
error: function(error) {
alert("Error: " + error.code + " " + error.message);
}
});
return appsArr
}
});
每当我尝试在帮助程序中返回我的数组(appsArr)时,我都会收到错误消息: “模板助手中的异常:未定义”。我也无法在控制台中输出我的解析对象。同样,相同的代码在渲染函数中起作用。
我是Meteor.js和Blaze模板的新手。请帮我正确地将这个解析查询实现到帮助器中,这样我就可以在模板中{{#each}}。
{{#each app}}
<h3 class="app-title">{{title}}</h3>
{{/each}}
提前致谢!
答案 0 :(得分:0)
因为query.find
函数是异步且非阻塞的,所以你不能只在回调中分配变量并将它们返回到回调之外 - 当你点击{时,回调还没有运行{1}}语句,因此您将返回尚未定义的内容。
解决这个问题的一个简单方法是使用一个反应变量(一个观察其分配的变量);您可以使用return
或内置的被动[ReactiveVar][1]
变量。我通常使用[Session][2]
。一个可能的实现将是这样的(对于不提前测试这一点道歉):
Session