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

时间:2013-07-05 22:40:42

标签: meteor

在我的sever/publish.js中,我有类似的内容:

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

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

每当我做这样的事情时,在我的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);
});

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

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

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

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

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

1 个答案:

答案 0 :(得分: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);
  });
}

您可以看到docEventedMind screencast