2013-10-16 19 views
0

的JavaScript对象的方法工作,我有一个代表餐厅为了一个目标:如何Angularfire

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键)被推送到数组上:

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])

回答

1

没有做的正是你想要的一个伟大的方式,根据Firebase FAQ因为:

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

这意味着你可以存储数据,而不是功能。这似乎是一个干净的方式来完成同样的事情将是最新的订单价值存储为您order对象的属性,并有一个方法,你orderService的一部分,更新它,每当菜单项添加或删除。或者,按照您的建议并在某个地方使用getOrderValue,但将其放入服务中可能还是有意义的。

+0

如果你真的想这样做你什么建议,不过,你可以使用函数构造函数(即新功能(订单[0] .value的)())。只要确保没有人不信任它就能修改对象的值属性(例如运行恶意函数)。 – bennlich

+0

是啊,这是一个很好的点,无论价值是如何计算或显示在用户的订单价值的“版本”应该不会对订单的真正价值最终的权威,因为它可以操控客户端。 – hiattp

0

其实我有同样的问题。 我想给我的firebase对象添加一个方法。 寻找最新angularfire文档后,我发现,$扩展可以做到这一点 我没有测试过,但我认为这是去了解它的方式。