【发布时间】:2014-02-20 16:39:42
【问题描述】:
我已经坚持了几天了。
我有解析路线,看起来像这样:
.when('/list/',{
controller : 'list',
templateUrl : 'template/list.stache',
resolve : {
list : function($q,$firebase){
var d = $q.defer(),
ref = new Firebase(_config.url+'/list/');
ref.once('value', function(s){
if(s.val() == null){
d.reject('Object not found');
}
d.resolve($firebase(ref));
});
return d.promise;
}
}
})
它在任何浏览器中都很好用,由于某种原因它在 Android 应用程序中失败(使用 phonegap ),它正确加载数据,但是当您尝试保存它时(使用 $save() ),数据在本地更新但无法执行如此遥远。
测试了一些理论,尝试在控制器中调用 $firebase,使用类似:
$scope.fb = $firebase(new Firebase(_config.url+'/list/'))
$scope.fb.$on('loaded', function(d){
$scope.fb[$scope.fb.$getIndex()[0]].test = 'AAAAAA!'
$scope.fb.$save()
})
上面的工作正常,所以我认为它与承诺有关。
有人有什么想法吗?
编辑---
仍在努力找出问题,但能够缩小范围以解决:
.when('/list/',{
controller : function(){
new Firebase('https://XXX.firebaseio.com/test/').push('Hey!');
},
templateUrl : 'template/list.stache',
resolve : {
list : function($q,$firebase){
var d = $q.defer(),
ref = new Firebase(_config.url+'/list/');
ref.once('value', function(s){
if(s.val() == null){
d.reject('Object not found');
}
d.resolve($firebase(ref));
});
return d.promise;
}
}
})
失败了。但是:
.when('/list/',{
controller : function(){
new Firebase('https://XXX.firebaseio.com/test/').push('Hey!');
},
templateUrl : 'template/list.stache'
})
按预期工作。
请注意,这两种方法都可以在浏览器中正常工作(在 firefox 和 chrome 上测试)。仅在使用 phonegap 编译到 android 应用程序时才会失败。
感谢任何想法。
【问题讨论】:
-
如何在 Android 上失败?此处的精度将有助于理解错误和用例。如果它没有远程发送数据,我们可以检查的地方会出现错误。
-
这就是问题所在,它没有给出任何错误,我不得不退回到在控制器中调用 fb,这对于 ux 来说有点不方便。返回的对象(来自 resolve)具有所有方法($save() 等)的主要问题,但是每当您尝试调用它们中的任何一个时,您都可以看到本地数据的更改,但看不到远程
标签: firebase angularfire