我正在制作简单的应用程序,用户可以在网站中添加一些数据。每次,当用户添加新的“名称”时,我希望为每个连接的用户自动显示最新的名称。 我不确定我的Template.names.name的实现是不是一个好主意,也许我应该使用订阅呢?
这是我的代码:
<template name="names">
<p>What is your name ?</p>
<input type="text" id="newName"/>
<input type="button" id="nameSubmit" value="add new"/>
<p>Your name: {{name}}</p>
</template>
if (Meteor.isClient) {
Template.names.name({
'click input#nameSubmit': function () {
Meteor.call('newName', document.getElementById("newName").value);
}
});
Template.names.name = function () {
var obj = Names.find({}, {sort: {"date": -1}}).fetch()[0];
return obj.name;
};
}
if (Meteor.isServer) {
newName: function (doc) {
var id = Names.insert({
'name': doc,
'date': new Date()
});
return id;
}
}
我使用meteorjs版本0.8.1.1。
答案 0 :(得分:1)
我认为您的代码本身唯一错误就是您的方法..要定义可以与Meteor.call
一起使用的方法,您可以通过调用Meteor.methods
来创建它们
Meteor.methods({
newName: function (name) {
Names.insert({
'name': doc,
'date': new Date()
});
}
});
另外几个注意事项..方法应该在共享空间中定义,而不仅仅是在服务器上,除非有某些特定原因。这就是为什么它将在客户端上进行模拟并产生适当的延迟补偿。
同样在Template.names.name中,您可以返回findOne的结果,而不是使用光标上的fetch()。
Template.names.name = function () {
return Names.findOne({}, {sort: {"date": -1}}).name;
};