2013-10-16 63 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文檔後,我發現,$擴展可以做到這一點 我沒有測試過,但我認爲這是去了解它的方式。