1

我正在遵循mightygio(http://mightygio.com/2013/05/integrating-rails-and-angularjs-part-3-rest-and-angular-resource)的示例,并希望在更新时简化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 发送到服务器之前,如何删除这些密钥?

更新

我想我可以使用这样的东西,但有更好的方法吗?

  $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) ->
4

1 回答 1

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(或 Underscore)。

于 2014-04-08T04:34:58.580 回答