2014-01-14 42 views
0

我有一個子資源,它將擁有與其相關的全套方法。我開始實施創建(我有後端工作)。基本上我希望能夠用這種結構使用restangular子資源

http://127.0.0.1:8000/rest/parent_resource/<parent_id>/child_resource/ 

哪裏是一個整數字段標識父對象的工作。例如:

http://127.0.0.1:8000/rest/parent_resource/87/child_resource/ 

出於安全原因,我不想將集合作爲一個整體呈現給最終用戶。因此,obj.child_resource = [{blah}]不是我正在考慮的方法。 parent_resource /集合由一個用戶擁有,並且可以從可以更新/刪除他們對集合的貢獻的其他用戶對集合進行貢獻(創建)。

我失去了如何設置這與restangular。我想擺弄這一點,但我不認爲我的附加標識符URI是正確的前進方式:

app.factory('ParentResource', function (Restangular) { 
    return { 
      getList: function() { 
      return Restangular.all('rest/parent_resource').getList() 
      } 
      , get: _.memoize(
      function (id) { 
       return Restangular.one('rest/parent_resource', id).get() 
      }) 
      , createChild: function(parentId, field_1, field_2) { 

      var newChild = { 
       "field_1": field_1 
       , "field_2": field_2 
      } 

      return Restangular.all('rest/parent_resource/' + parentId + '/childResource').post(newChild) 
     } 
    } 
}) 

用法會是這樣的

ParentResource.get(87).then(function(parentObj){ 
    parentObj.createChild(1,2) 
}) 
+0

一個旁註:'我不想將整個系列展示給最終用戶 - 它被稱爲'通過默默無聞的安全'。如果收集ID是如此敏感的數字 - 考慮用隨機散列替換它(與後端的收集ID相關聯)。否則,可以通過迭代收集ID來查找現有ID – borisano

回答

1

我要調查此解決方案:

return Restangular.one('rest/parent_resource', parentId).all('child_resource').post(newChild) 

在這種情況下:

app.factory('ParentResource', function (Restangular) { 
    return { 
      getList: function() { 
      return Restangular.all('rest/parent_resource').getList() 
      } 
      , get: _.memoize(
      function (id) { 
       return Restangular.one('rest/parent_resource', id).get() 
      }) 
      , createChild: function(parentId, field_1, field_2) { 

      var newChild = { 
       "field_1": field_1 
       , "field_2": field_2 
      } 

       return Restangular.one('rest/parent_resource', parentId).all('child_resource').post(newChild) 
     } 
    } 
}) 
+0

這有效 - 我不知道它是否是首選解決方案,也不是我隨時可以診斷副作用 - 在此階段,我正在使我的應用程序啓動並運行將優化/稍後進行生產 – akaphenom