Angularjs 使用带有angularFire的ng网格-关键命名问题

Angularjs 使用带有angularFire的ng网格-关键命名问题,angularjs,firebase,angular-ui,ng-grid,angularfire,Angularjs,Firebase,Angular Ui,Ng Grid,Angularfire,我现在已经玩过一点了,但是我的头脑还没有清醒过来: (使用angularFire 1.2.2、angularFire 0.5.0和最新ng网格) 我有一个firebase,我使用angularFire将数据提取到ng网格组件中,如下所示: //First I go get my data, in this case something called 'grades' from ..../db/grades var promise = angularFire(new Firebase($s

我现在已经玩过一点了,但是我的头脑还没有清醒过来:

(使用angularFire 1.2.2、angularFire 0.5.0和最新ng网格)

我有一个firebase,我使用angularFire将数据提取到ng网格组件中,如下所示:

//First I go get my data, in this case something called 'grades' from ..../db/grades
    var promise = angularFire(new Firebase($scope.fireBaseUrl), $scope, 'grades');
//When they're fetched I start up a watcher
    promise.then(function(grades) {
    startWatchGrade($scope, filterFilter, appSettings);
});

//Then I bind that grades as a datasource to my ng-grid
$scope.gridOptions = { 
data: 'grades',
enableCellSelection: false,
enableRowSelection: true,
etc....,
效果很好,我已经做了一些控件,可以将新项目添加到“等级”(推送)和删除项目(拼接),所有内容都可以很好地反映到ng网格中。像这样:

//Adding new like this is ok
$scope.grades.push({some-new-data-here});

//Deleting old like this is ok
$scope.grades.splice(row.rowIndex, 1);
但这种方法不会自动生成firebase的基于int的键,这些键在修改时会一直更改,因此我想控制这些键,所以我更改了添加要使用的项:

var fbRef = new Firebase($scope.fireBaseUrl);
var newRef = fbRef.push({some-items-here});
一切正常,使用我的非整数ID将数据存储到firebase中,但它不再绑定到ng网格。将“grades”转储到控制台中会显示返回的所有行,但它不会显示在ng网格中

简而言之:angularFire生成的基于整数的索引在ng网格中正常工作,而firebase.push创建的自定义字母数字索引则不行

我希望这听起来不要太神秘。我曾想过拉小提琴,但希望这是我忽略的、简单的解决方法。如果不是的话,我会试着修补一个

谢谢

根据,$firebase总是返回对象,而不是数组,这在ng grid中不太适用。在本例中,angularfire提供了一个帮助过滤器orderByPriority。确保将$filter注入控制器

(注意:我没有使用promises或watchers,只使用angularfire内置的事件)

对于新行,您可以尝试类似的$on('change'…)方法


希望这有助于

angularFire版本?提示:1.2+具有更好的相等性检查。另外,在这里尝试使用angularFireCollection,你可能会更幸运地使用更新(collection)的数组,而不是更新时被替换的对象(angularFire)。谢谢,下次我将在我的开发环境中使用它。不走运,小提琴将是完美的。嘿,Tim,查看angularFire seed以获取0.3的angularFire和angularFireCollection示例,或$firebase示例。可能是我,但我完全不知道在第二种方法中如何绑定到“分数”模型?很难看到这如何与“加载”事件一起工作。。。似乎回调不是数据本身,而是添加或修改的项的键(没有显示它是哪一个)。关于保持AngularFire服务和ng网格之间双向绑定工作的最佳方式有何想法?
$scope.grades = $firebase(new Firebase($scope.fireBaseUrl));
$scope.gradesData=[];
$scope.gridOptions = { data: 'gradesData'}
$scope.grades.$on("loaded", function(data) {
    var arrData = $filter("orderByPriority")(data);
    $scope.$apply(function(){$scope.gradesData = arrData;});
});