2013-08-07 16 views
1

我按照來自mightygio的示例(http://mightygio.com/2013/05/integrating-rails-and-angularjs-part-3-rest-and-angular-resource)並希望在更新時簡化postData。AngularJS從postdata中移除數據

目前我有這個

$scope.update = -> 
    Letter.update 
     id: $stateParams['id'] 
    , 
     letter: 
     subject: $scope.letter.subject 
     body: $scope.letter.body 

    # success 
    , (response) -> 
     $location.path "/letters" 

    # failure 
    , (response) -> 

當我有一個大表格,有很多數據這得到相當長的和難以維持的。這將是更好,如果我可以只通過$ scope.letter像這樣:

$scope.update = -> 
    Letter.update 
     id: $stateParams['id'] 
    , 
     letter: $scope.letter 

    # success 
    , (response) -> 
     $location.path "/letters" 

    # failure 
    , (response) -> 

我是更新這些created_at,ID &的updated_at鍵時,我無法通過某些屬性,以我的後端的問題。

如何在將我的JSON發送到服務器之前刪除這些密鑰?

UPDATE

我想我可以用這樣的事情,但有沒有更好的辦法?

$scope.update = -> 
    letter = {} 
    # Strip out id, created_at & updated_at 
    angular.forEach($scope.letter, (value,key) -> 
     if(key!='id' && key!='created_at' && key!='updated_at') 
     letter[key]=value 
    ,letter) 

    Letter.update 
     id: $stateParams['id'] 
    , 
     letter: letter 
    # success 
    , (response) -> 
     $location.path "/letters" 

    # failure 
    , (response) -> 

回答

0

強烈推薦使用衆所周知的,高性能的工具庫,例如Lo-DashUnderscore。使用其中的任何一個,您都可以輕鬆選擇包含密鑰的白名單,或者排除列入黑名單的密鑰。

白名單例如:

_.pick({name: 'moe', age: 50, userid: 'moe1'}, 'name', 'age'); 
=> {name: 'moe', age: 50} 

黑名單例如:

_.omit({name: 'moe', age: 50, userid: 'moe1'}, 'userid'); 
=> {name: 'moe', age: 50} 

PS。如果您使用衆所周知的Restangular庫的決定變得更容易,因爲它依賴於Lodash(或下劃線)了。

相關問題