/ / Come lavorare con i metodi degli oggetti javascript in Angularfire - javascript, angularjs, firebase, angularfire

Come lavorare con i metodi degli oggetti javascript in Angularfire: javascript, angularjs, firebase, angularfire

Ho un oggetto che rappresenta un ordine da ristorante:

function order () {
this.customer_name = ""
this.menu = // menu object
}

esteso con alcuni metodi oggetto per la logica aziendale, come:

order.prototype.value = function() {
var total = 0;
for (var i = 0; i < this.menu.length; i++) {
// calculate the order value
}
return total;
}

Negli ordini del controller angolare vengono inviati a un array quando vengono inviati (tramite ng-clic da un pulsante nella vista):

var ref = new Firebase("https://myfirebase.firebaseio.com");
$scope.orders = [];
angularFire(ref, $scope, "orders");

$scope.currentOrder = orderService;

$scope.submitOrder = function() {
$scope.orders.push($scope.currentOrder);
};

Una volta che gli ordini vengono inseriti nell'array, proprietà come orders[0].customer_name lavoro, ma metodi come orders[0].value() don "t.

Sembra ragionevole che Firebase / Angularfire possa solo sincronizzare JSON, ma esiste un approccio che mi consenta di mantenere la logica relativa agli ordini inclusa con order oggetto, cioè senza dover scrivere $scope.getOrderValue(orders[0])?

risposte:

1 per risposta № 1

Non c'è un ottimo modo per fare esattamente quello che vuoi, poiché secondo il Domande frequenti su Firebase:

A livello basso, supportiamo fondamentalmente gli stessi tipi di dati di JSON: stringhe, numeri, booleani e oggetti (che a loro volta contengono stringhe, numeri, booleani e altri oggetti).

Ciò significa che è possibile memorizzare i dati ma non le funzioni. Sembra che un modo pulito per ottenere lo stesso risultato sia archiviare l'ultimo valore dell'ordine come proprietà del tuo order oggetto, e avere un metodo come parte del tuo orderService che lo aggiorna ogni volta che vengono aggiunte o rimosse voci di menu. In alternativa, fai ciò che hai suggerito e hai un getOrderValue da qualche parte, ma probabilmente ha ancora senso metterlo in un servizio.


0 per risposta № 2

In realtà ho avuto lo stesso problema. Volevo aggiungere un metodo al mio oggetto firebase. Dopo aver consultato gli ultimi documenti di angularfire, ho scoperto che $ extend può fare proprio questo Non l'ho ancora testato, ma penso che questo sia il modo per farlo.