我有一个注册表单,当用户点击提交按钮时,每个文本框中的值将被发送到服务器以插入该数据,并返回true / false。
客户端:
Template.cust_register.events({
'click button': function(){
var email = $('#tbxCustEmail').val();
var msg = $('#tbxCustMsg').val();
var isSuccess = insertMsg(email,msg);
if(isSuccess){
alert("Success");
}else alert("Try again");
}
});
服务器:
function insertMsg(email,msg){
Messages.insert({Email:email,Message:msg});
return true;
}
结果证明不起作用。 怎么解决这个? 很多人说“使用发布/订阅”,但我不明白如何使用它。
答案 0 :(得分:4)
首先,观看introductory screencast并阅读文档的Data and security部分。
您在发布/订阅模型中的代码如下所示:
常见:
Messages = new Meteor.Collection('messages');
客户端:
Meteor.subscribe("messages");
Template.cust_register.events({
'click button': function(){
var email = $('#tbxCustEmail').val();
var msg = $('#tbxCustMsg').val();
Messages.insert({Email:email,Message:msg});
}
});
服务器:
Meteor.publish("messages", function() {
return Messages.find();
});
答案 1 :(得分:4)
另一种解决方案是使用Meteor.call('yourMethodName')
(在客户端上)。
然后,在服务器上,您可以
Meteor.methods({
yourMethodName: function() { /* validate input + return some data */ }
});
您可以考虑将会话变量设置为返回值。
Meteor.call('yourMethodName', function (err, data) {
if (!err) {
Session.set('myData', data);
}
});
然后在一些模板中......
Template.whatever.helpers({
messages: function() {
return Session.get('myData');
}
});
为什么这一切?
1) You can explicitly deny all direct `insert/update/find` queries from the client, and force usage of pre-defined Meteor methods.
2) You can manually determine when certain data is "refreshed".
显然,这种方法破坏了订阅/发布模型的价值,它只应用于不需要实时数据的情况。