使用restangular子资源

时间:2014-01-14 21:14:19

标签: javascript angularjs 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 / collection由一个用户拥有,其他用户可以向集合贡献(创建),这些用户可以更新/删除他们对集合的贡献。

我迷失了如何用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)
})

1 个答案:

答案 0 :(得分: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)
        }
    }
})