【发布时间】:2015-04-23 04:43:19
【问题描述】:
我正在研究如何更新我的 Firebase 项目上的 updatedAt 时间戳。
更新的thing.name 和thing.description 已更新到对象,但我不知道如何更新时间戳,即使我在editedThing 对象中传递它。
这是我当前的代码:
HTML
<h1>You are editing </h1>
<section class="unit">
<form ng-submit="updateThing(selectedThing)">
<input type="text" name="name" ng-model="selectedThing.name" value=""><br>
<input type="text" name="name" ng-model="selectedThing.description" value="">
<button type="submit">Submit</button>
</form>
</section>
JS
var ref = new Firebase(FBURL);
var thingsRef = ref.child('things');
var things = $firebaseArray(thingsRef);
$scope.things = things;
// Add thing
$scope.addThing = function(thing) {
var d = new Date();
var newThing = {
name: thing.name,
description: thing.description,
createdAt: d.toISOString(),
updatedAt: d.toISOString()
};
things.$add(newThing);
};
// Update thing
var serviceId = $routeParams.serviceId;
if(serviceId) {
$scope.selectedThing = getThing(serviceId);
}
function getThing(serviceId) {
return $firebaseObject(ref.child('things').child(serviceId));
}
$scope.updateThing = function(thing) {
var d = new Date();
var editedThing = {
name: thing.name,
description: thing.description,
updatedAt: d.toISOString()
}
$scope.selectedThing.$save(editedThing);
};
如果我更新 name 或 description,则这些值会在 Firebase 中更新。但更新时不会生成新的时间戳,也不会推送到 Firebase。
知道我做错了什么吗?任何帮助表示赞赏。提前致谢!
【问题讨论】:
-
由于您的
$scope.selectedThing指的是$firebaseObject,因此您只需修改它($scope.updatedAt = d.toISOString())并在其上调用$save。您可能应该考虑使用Firebase.ServerValue.TIMESTAMPbtw:firebase.com/docs/web/api/servervalue/timestamp.html -
使用基于 UNIX 的时间戳有什么好处吗?
-
重要的区别不在于格式,而在于可靠性。如果您有两个客户端并且它们的时钟完全不同步,那么您的客户端生成的时间戳将是一种不可靠的机制,例如用于订购数据。当您使用
Firebase.ServerValue.TIMESTAMP时,时间戳将始终在服务器上生成。
标签: angularjs firebase angularfire