javascript - 如何在模板助手中使用 Meteor 方法

标签 javascript meteor

我如何定义一个 Meteor 方法,它也可以在模板助手中调用?

我有这两个文件:

文件:lib/test.js

Meteor.methods({
    viewTest : function (str) {
        return str;
    }
});

文件:客户端/myView.js

Template.helloWorld.helpers({
    txt : function () {
        var str = Meteor.call('viewTest', 'Hello World.');
        return str;
    }
});

当我给“str”一个普通字符串时,一切正常。但在这种情况下,我的模板没有任何值(value)。我在同一文件中定义了 - 为了测试 - 在该文件中该方法是一个普通函数并尝试调用该函数。我得到的错误是该函数不存在。所以我认为 Meteor 在知道我为它定义的方法之前尝试渲染模板。但我认为这有点不寻常 - 不是吗?

最佳答案

现在有一种新方法(Meteor 0.9.3.1)不会污染 session 命名空间

Template.helloWorld.helpers({
    txt: function () {
        return Template.instance().myAsyncValue.get();
    }
});

Template.helloWorld.created = function (){
    var self = this;
    self.myAsyncValue = new ReactiveVar("Waiting for response from server...");
    Meteor.call('getAsyncValue', function (err, asyncValue) {
        if (err)
            console.log(err);
        else 
            self.myAsyncValue.set(asyncValue);
    });
}

在“已创建”回调中,您创建了一个 ReactiveVariable 的新实例(参见 docs)并将其附加到模板实例。

然后您调用您的方法,当回调触发时,您将返回值附加到 react 变量。

然后你可以设置你的助手来返回 react 变量的值(现在附加到模板实例),并且它会在方法返回时重新运行。

但请注意,您必须添加 reactive-var 包才能使其工作

$ meteor add reactive-var

关于javascript - 如何在模板助手中使用 Meteor 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22147813/

相关文章:

javascript - 如果克隆选择具有特定值,则使输入字段可见

javascript - 如何获取javascript文件的位置(src)?

meteor - 如何在工作的 Meteor 项目上实现 Collection2?

shell - meteorJS 从服务器调用一个 shell 命令

javascript - D3js Force-directed graph 链接交叉点避免

javascript - 元素是在 DOM 中另一个元素之前还是之后

javascript - 有没有办法让 jslint 在使用控制台时显示警告或错误?

javascript - 如何处理 MeteorJS 中的 UI 警报

Angular 2 教程上的 Meteor JS 路由不起作用

javascript - SimpleSchema 匹配除 null 之外的任何类型