【发布时间】:2012-08-27 05:42:19
【问题描述】:
使用 Meteor,我试图了解何时使用服务器端 Meteor.methods(),同时仍保留即时 UI 更新。
来自 Andrew Scala 的 introductory tutorial,他声称当您想要更新和修改数据库文档时应该使用 Meteor.methods():
这个想法是你定义服务器上的所有功能 修改和更新数据等危险的东西,然后让客户端 调用这些函数并像常规函数一样获取返回值。这 客户永远不会看到实现,也不会亲自修改 数据。服务器完成所有工作。
按照这个建议,我在我的代码中实现了这个:
服务器端:
Meteor.methods({
addMovie: function(data) {
var movie = Movies.insert({name: data});
return movie;
},
...
客户端:
Template.movies.events = ({
'click #add-movie': function(e) {
var name = document.getElementById('movie-name').value;
Meteor.call('addMovie', name);
return false;
},
...
这可行,但速度很慢。 UI 不会像您在客户端调用 Movies.insert() 那样立即更新。 docs 表示,为了解决问题,您可以在客户端创建存根:
在客户端调用方法定义了与关联的存根函数 同名的服务器方法。您不必为 如果你不想,你的方法。在这种情况下,方法调用只是 就像其他系统中的远程过程调用一样,你必须等待 从服务器获取结果。
但是这些存根应该是什么样子?它应该基本上看起来与服务器端方法相同吗?如果是这样,有什么意义?我正在寻找对Meteor.methods() 的使用和目的、存根的要点/使用及其实现的更全面的解释。
编辑: David Greenspan 帮助澄清了 meteor-talk 上 Meteor.methods() 和存根的使用。
【问题讨论】:
-
您对大卫的回答满意吗?如果是这样,请将其作为答案发布并接受。
标签: javascript node.js meteor stubs