无法基于parse.com查询创建Meteor.js帮助程序

时间:2015-04-13 00:51:43

标签: javascript meteor parse-platform meteor-blaze meteor-helper

我的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}} 

提前致谢!

1 个答案:

答案 0 :(得分:0)

因为query.find函数是异步且非阻塞的,所以你不能只在回调中分配变量并将它们返回到回调之外 - 当你点击{时,回调还没有运行{1}}语句,因此您将返回尚未定义的内容。

解决这个问题的一个简单方法是使用一个反应变量(一个观察其分配的变量);您可以使用return或内置的被动[ReactiveVar][1]变量。我通常使用[Session][2]。一个可能的实现将是这样的(对于不提前测试这一点道歉):

Session