在Meteorjs中从服务器获取数据的最佳方法是什么?

时间:2014-05-01 21:13:37

标签: meteor

我正在制作简单的应用程序,用户可以在网站中添加一些数据。每次,当用户添加新的“名称”时,我希望为每个连接的用户自动显示最新的名称。 我不确定我的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。

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