2014-11-25 2 views
0

Я хотел бы проиндексировать клиентов в хранилище данных, используя их адрес электронной почты в качестве ключа, чтобы обеспечить уникальность.

Я инициализация моего соединения следующим образом:

var ref = new Firebase("https://[myApp].firebaseio.com/"); 
$scope.customers = $firebase(ref.child("customers")).$asArray(); 

А вот мой контроллер:

function customerCtrl($scope) { 
    $scope.addNewMember = function (firstName, lastName, email) { 
     $scope.customers.$add({ 
      firstName: firstName, 
      lastName: lastName, 
      email: email 
     }); 
    } 
} 

Конечно, это создает уникальный ключ, как -Jbd4KJ_CrFqlpnqbGVu. Есть ли способ установить ключ вручную вместо этого, чтобы мои данные выглядели так?

{ 
    '[email protected]': { 
    firstName: 'Bob', 
    lastName: 'Smith' 
    }, 
    '[email protected]': { 
    firstName: 'Jane', 
    lastName: 'Doe' 
    }, 
    ... 
} 

Или, я думаю об этом неправильно?

ответ

1

Вам не нужна коллекция (для использования $ asArray), если вы работаете с определенным путем с помощью ключа, который вы уже знаете. В этом случае вам, вероятно, предстояло работать напрямую с ссылкой Firebase.

var ref = new Firebase("https://[myApp].firebaseio.com/"); 
$scope.customers = $firebase(ref.child("customers")).$asArray(); 
$scope.addNewMember = function(firstName, lastName, email) { 
    var escapedEmail = escapeEmailAddress(email); 
    ref.child('customers/'+escapedEmail).set({firstName: firstName, lastName: lastName, email: email}); 
}; 

function escapeEmailAddress(email) { 
    return (email||'').replace(/\./g, ','); 
} 

Данные будут автоматически синхронизированы в $ scope.customers в режиме реального времени.

Если вы установите на этом через синхронизированного массив, а затем вручную объявить $ ID и использовать $ сохранить вместо:

$scope.addNewMember = function (firstName, lastName, email) { 
    var rec = { 
     firstName: firstName, 
     lastName: lastName, 
     email: email, 
     $id: escapeEmailAddress(email) 
    }; 
    $scope.customers.push(rec); 
    $scope.customers.$save(rec); 
}; 
+0

просто необходимо изменить функцию выхода, чтобы сделать глобальную замену, то есть ' return (email || '') .replace (/\./ g, ',') '. –

+0

Ах, верно! Спасибо, Джон. Это результат программирования на слишком многих языках за один день. – Kato

Смежные вопросы