Я немного поиграл с этим сейчас, но не могу понять:
(Используя angular 1.2.2, angularFire 0.5.0 и последнюю версию ng-grid)
Итак, у меня есть firebase, и я использую angularFire для извлечения своих данных в компонент ng-grid следующим образом:
//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....,
Отлично работает, и я сделал элементы управления, которые добавляют новые элементы в «оценки» (push) и удаляют элементы (splice), и все довольно хорошо отражается в ng-grid. Вот так:
//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);
Но этот подход автоматически генерирует ключи на основе int для firebase, которые постоянно меняются при изменении, поэтому я хотел получить контроль над ключами, поэтому я изменил добавление элементов для использования вместо этого:
var fbRef = new Firebase($scope.fireBaseUrl);
var newRef = fbRef.push({some-items-here});
И все работает нормально, сохраняя данные в firebase с моими нецелочисленными идентификаторами, но больше не привязывается к ng-grid. Сброс «оценок» в консоль показывает все возвращаемые строки, но не отображается в ng-grid.
Итак, в двух словах: индекс на основе целых чисел, сгенерированный angularFire, работает нормально в ng-grid, а пользовательский буквенно-цифровой, созданный firebase.push, - нет.
Надеюсь, это не звучит слишком загадочно. Думал сделать скрипку, но будем надеяться, что это какая-то «ошибка», которую я упустил из виду и которую легко решить. Если нет, то я попытаюсь залатать один.
Спасибо!