2

在我的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});
});

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

4

1 回答 1

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);
  });
}

您可以查看文档EventedMind 截屏视频

于 2013-07-06T00:24:23.513 回答