【问题标题】:Trying to display last 10 calculations for a calculator试图显示计算器的最后 10 次计算
【发布时间】:2015-10-04 02:38:10
【问题描述】:

我可以让我的程序显示所有以前的计算,但我想将其限制为最近的 10 个。

这是我的问题...

Template.keypad.helpers({
    previous: function() { return previous.find(); }
});

我试着用这个替换它...

Template.keypad.helpers({
    previous: function() { return previous.sort({_id:1}).limit(10);}
});

但是,当我实现第二个代码块时,它不会显示我的集合中的任何项目。

我可以做些什么来完成这项工作?谢谢。

现在这是我的 startup.js 文件

if (Meteor.isServer) {
  Meteor.startup(function () {
    if(Previous.find().count() === 0){
        Previous.insert({sum:"1+1", answer:"2"});
       }
    });
  Meteor.methods({
  previousInsert: function(arg1, operator, result){
    return Previous.insert({
      arg1:calculation,
      operator:"=",
      result:result,
      datetime: new Date(),
      //user: this.userId
    });
  },
});
}

这是我启动程序时遇到的错误...
=> 错误阻止启动:
使用 ecmascript 处理文件时(针对目标 os.linux.x86_64):
server/startup.js:8:18: server/startup.js: 意外令牌 (8:18)
=> 您的应用程序有错误。等待文件更改。

【问题讨论】:

    标签: javascript mongodb meteor


    【解决方案1】:

    查询的语法应该是这样的:

    Template.keypad.helpers({
      previous: function() { 
        return previous.find({}, {sort: {_id:1}, limit: 10}) 
    });
    

    但是,仅此一项不会为您提供所需的结果,因为 _id 字段不包含升序整数。您最好的选择是保存时间戳并按该字段排序。

    我建议您遵循集合名称大写的约定,这样更容易区分previous(您的辅助方法名称)和Previous(集合)。

    遵循“不信任客户端”的原则,我将在服务器上的 Meteor 方法中添加自动值,如下所示:

    Meteor.methods({
      previousInsert: function(arg1, arg2, operator, result){
        return Previous.insert({
          arg1:arg1,
          arg2:arg2,
          operator:arg1,
          result:result,
          datetime: new Date(),
          //user: this.userId   
        });
      }, 
    });
    

    然后像这样调用客户端:

    Meteor.call('previousInsert', 2, 4, '+', 6)
    

    然后检索最后 10 个:

    Previous.find({}, {sort: {datetime:-1}, limit: 10})
    

    如果您使用 Accounts 包,请取消注释 user: this.userId 在 previousInsert 中的行,您可以将过滤器更改为:

    Previous.find({user: Meteor.userId()}, {sort: {datetime:-1}, limit: 10})
    

    并允许每个用户只查看自己之前的 10 次计算

    如果您不想在插入时使用 Meteor Methods,可以查看 here

    这是您想要达到的目标的最小meteorpad 示例。 请注意,我不建议像这样使用 eval。但是,这与此处提出的原始问题无关。

    【讨论】:

    • 如何为每个 id 添加时间戳?
    • 您没有在 _id 字段中添加时间戳,它是一个新字段。我会把它添加到答案中
    • javascript api 不支持您从 python 示例中复制的 fluent api 调用样式
    • 我不知道把所有这些放在哪里......我把meteor方法放在我的startup.js文件中的if(Meteor.isServer)语句中。然后我在键盘助手中添加了 Previous.find 但是我不知道在流星方法中究竟要编辑什么以使其适合我的程序。我应该在哪里调用流星方法?
    • 我在上面的问题中添加了更多内容,显示了我现在收到的错误以及我遇到问题的代码
    猜你喜欢
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 2016-02-16
    • 1970-01-01
    • 2012-04-11
    • 2022-07-04
    相关资源
    最近更新 更多