在我的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});
});
这是一个错误还是我错过了什么?
答案 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);
});
}
您可以看到doc和EventedMind screencast。