Meteor.call中的集合不会更新服务器数据

jag*_*ggy 2 meteor

在我sever/publish.js,我有这样的事情:

Questions = new Meteor.Collection("questions");

Meteor.publish("questions", function(){
    return Questions.find();
});
Run Code Online (Sandbox Code Playgroud)

在我client/app.js做这样的事情时:

Questions = new Meteor.Collection("questions");

var questionHandle = Meteor.subscribe("questions");

Meteor.methods({
    post: function(title){
        Questions.insert({title: title});
    }
});

$('.save').on('click', function(){
    var title = $('input[name="title"]').val();
    Meteor.call('post', title);
});
Run Code Online (Sandbox Code Playgroud)

它不起作用!但是,如果我把代码放在自身之外,服务器数据会更新.

Questions = new Meteor.Collection("questions");

var questionHandle = Meteor.subscribe("questions");

$('.save').on('click', function(){
    var title = $('input[name="title"]').val();
    Questions.insert({title: title});
});
Run Code Online (Sandbox Code Playgroud)

这是一个错误还是我错过了什么?

mqu*_*lle 5

如果要更新真实服务器数据库,则必须在服务器上定义方法.如果您在客户端上定义它,它将首先运行("延迟补偿").

Questions = new Meteor.Collection("questions");

Meteor.methods({
    post: function(title){
        Questions.insert({title: title});
    }
});

if (Meteor.isServer){
  Meteor.publish("questions", function(){
      return Questions.find();
  });
}

if (Meteor.isClient){
  var questionHandle = Meteor.subscribe("questions");

  $('.save').on('click', function(){
      var title = $('input[name="title"]').val();
      Meteor.call('post', title);
  });
}
Run Code Online (Sandbox Code Playgroud)

您可以看到docEventedMind截屏视频.