我正在使用Firebase从中提取对象的结果集
$scope.list = $firebase(ref).$asArray()
。
然后我在列表中找到一个对象并按照以下方式更新它:
var foundObject = $filter('getByFoo')($scope.list, 'bar');
var item = $scope.list.$getRecord(foundObject.$id);
item.foo = "baz";
$scope.list.$save(item).then(function() {});
这样可以正常工作并将更改传播到FB。
我的问题是,如果两个客户端脱机,并且每个客户端更新列表中的不同对象,然后它们同时重新连接,则只有其中一个客户端的更改传播到另一个,反之则不然
有谁知道为什么或者我在这里做错了什么?
编辑 - 下面是重现问题的mcve(SO剥离了一些标签,但只是将h-tag上的ng-app =“myApp”和body标签上的ng-controller =“MyController”)。
要重现此问题,请打开此代码的两个单独实例。下线。在一个实例中,在文本框中输入第一个条形码,然后按Enter键。在另一个例子中,输入第二个条形码并按Enter键。然后上网。两个实例都不会在签入时显示第一个和第二个条形码。
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.17/angular.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/angular-filter/0.4.7/angular-filter.js"></script>
<script src="https://cdn.firebase.com/js/client/2.0.4/firebase.js"></script>
<script src="https://cdn.firebase.com/libs/angularfire/0.8.0/angularfire.min.js"></script>
<input ng-model='barcode' ng-keydown="checkGuest($event)" type='text' id='txtBarcode' placeholder='Enter barcode'>
<ul id='ulGuests'>
<li ng-repeat='guest in guests'>
<strong>{{guest.Barcode}}</strong>
{{guest.CheckedIn}}
</li>
</ul>
<script>
var myApp = angular.module("myApp", ["firebase", 'angular.filter']);
myApp.filter('getByBarcode', function() {
return function(input, barcode) {
var i=0, len=input.length;
for (; i<len; i++) {
if (+input[i].Barcode == +barcode) {
return input[i];
}
}
return null;
}
});
myApp.controller('MyController', ['$scope', '$filter', '$firebase',
function($scope, $filter, $firebase) {
var ref = new Firebase("https://glowing-heat-7035.firebaseio.com/results/");
$scope.guests = $firebase(ref).$asArray();
$scope.checkGuest = function(e) {
//LISTEN FOR RETURN KEY
if (e.keyCode === 13 && $scope.barcode) {
var foundGuest = $filter('getByBarcode')($scope.guests, $scope.barcode);
var item = $scope.guests.$getRecord(foundGuest.$id);
if (item.CheckedIn == 'Yes') {
item.CheckedIn = 'No';
} else {
item.CheckedIn = 'Yes';
}
$scope.guests.$save(item).then(function() {
});
}
}
}
]);
</script>
答案 0 :(得分:1)
看起来这是一个在最新版本中得到纠正的错误(我可以在2.0.4中重新编写,但不能在2.1.1中重复)。