我有一个带有时间戳属性的模型。在服务器上创建记录时,我希望此属性的值由服务器而不是客户端提供的值初始化,以便这些时间戳在不同客户端之间保持一致。
如果我直接使用 firebase API,那么我知道我可以使用特殊 token Firebase.ServerValue.TIMESTAMP 来实现这一点。但是我不知道如何使用 ember-data 和 emberfire 适配器来做到这一点。
最佳答案
抱歉,我知道这已经晚了,但我遇到了同样的问题。
您可以使用 DS.Transform 定义自定义属性类型,该类型在序列化时按原样传递该值。我只是命名了我的时间戳。
// transforms/timestamp.js
/* global Firebase */
import DS from 'ember-data';
export default DS.DateTransform.extend({
serialize: function(date) {
if(date === Firebase.ServerValue.TIMESTAMP){
return date;
}
return this._super(date);
}
});
然后你可以按预期使用它:
// models/somemodel.js
import DS from 'ember-data';
export default DS.Model.extend({
createdAt: DS.attr("timestamp")
});
然后在一些 Controller 或其他东西中:
this.store.createRecord("somemodel", { createdAt: Firebase.ServerValue.TIMESTAMP });
当您保存它时,它会在服务器的副本上使用正确的值设置该字段,但不会使用该值更新本地记录。我仍在研究如何解决这个问题,但是一旦 EmberFire 更新,新的 Ember Data Store.fetch() 方法似乎是最坏的解决方案。
编辑:
又挖了一些。一些注意事项:
关于ember.js - emberfire 有没有办法指定模型上的时间戳属性应该被赋予 Firebase.ServerValue.TIMESTAMP 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26315454/