在Meteor中,如何在服务器确认之前将新插入的数据显示为灰色?

Gde*_*lin 31 meteor

假设我的应用程序有一个某种项目列表,用户可以在列表中插入新项目.

Meteor通常做的是:当用户在列表中插入项目时,它会立即显示在浏览器中,而无需等待服务器确认.

我想要的是:当一个项目处于此状态(已提交但尚未被服务器确认)时,它将显示在列表中的正确位置,但显示为灰色.

有没有办法让Meteor这样做?

Geo*_*off 38

当然.制作一个插入方法.当该方法运行时,让它检查它是否在模拟中运行,如果是,则在插入的项目上设置"临时"或"未确认"标志.使用它来决定是否将项目呈现为灰色.

假设您正在使用MongoDB:

// Put this in a file that will be loaded on both the client and server
Meteor.methods({
  add_item: function (name) {
    Items.insert({name: name,
                  confirmed: !this.isSimulation});
  }
});
Run Code Online (Sandbox Code Playgroud)

调用方法:

Meteor.call("add_item", "my item name");
Run Code Online (Sandbox Code Playgroud)

这就是你需要做的.这样做的原因是,一旦服务器完成了保存项目,客户端上的本地(模拟)更改将被撤消并替换为服务器上实际发生的任何事情(不包括'未确认'标志.)

以上是最简单的方法,但它会导致数据库中的所有记录都具有"已确认"的真实性.为避免这种情况,只有在确认属性为false时才设置它.

有关isSimulation和的更多信息,请参阅本文档的这一部分Meteor.methods