0

我有一个代表餐厅订单的对象:

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

扩展了一些用于业务逻辑的对象方法,例如:

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

在角度控制器中,订单在提交时被推送到数组中(通过视图中按钮的 ng-click):

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);
};

一旦订单被推送到数组中,属性就会orders[0].customer_name起作用,但方法orders[0].value()不会。

Firebase/Angularfire 只会同步 JSON 似乎是合理的,但是有没有一种方法可以让我保持与对象相关的逻辑包含在order对象中,即无需编写$scope.getOrderValue(orders[0])

4

2 回答 2

1

没有一种很好的方法可以完全按照您的意愿行事,因为根据Firebase 常见问题解答

在底层,我们支持与 JSON 基本相同的数据类型:字符串、数字、布尔值和对象(它们又包含字符串、数字、布尔值和更多对象)。

这意味着您可以存储数据但不能存储函数。完成同样事情的一种简洁方法似乎是将最新的订单值存储为对象的属性,并在添加或删除菜单项时将order方法作为您的一部分进行更新。orderService或者,按照你的建议去做,并在某个地方找到一个getOrderValue地方,但把它放在服务中可能仍然有意义。

于 2013-10-16T13:37:49.320 回答
0

我实际上有同样的问题。我想向我的 firebase 对象添加一个方法。在查看了最新的 angularfire 文档后,我发现 $extend 可以做到我还没有测试它,但我认为这是解决问题的方法。

于 2015-03-10T07:16:51.030 回答