Restangle函数在ng-repeat子元素中不起作用

时间:2014-04-03 22:11:12

标签: javascript angularjs restangular

我在AngularJS应用程序中使用Restangular与后端API通信。在下面的例子中,样式并不是真正的顶级,但由于我的问题不是与html相关的,这无关紧要。我的问题是change_status()函数(和其他函数)只适用于父(todo),而不适用于子(child)。因此调用change_status(todo)将完美无缺,但调用change_status(child)会给我todo.put is not a function错误。我不明白:传递父节点应该产生与传入子节点完全相同的结果,因为两者都是类似的对象(参见示例JSON)。

我无法提供一个有效的示例,因为此错误取决于与API的通信。但是,我已经包含了以下所有相关代码:

HTML:

...
<tbody ng-repeat="todo in todos | filter:search" ng-hide="todo.hidden">
    <tr>
        <td style="width:100px" ng-click="change_status(todo)">
            <span ng-if="todo.done" class="label label-success">Done</span>
            <span ng-if="!todo.done" class="label label-warning">In Progress</span>
        </td>
        ...
    </tr>
    <tr ng-repeat="child in todo.children | filter:search" ng-hide="child.hidden">
        <td style="width:100px" ng-click="change_status(child)">
            <span ng-if="child.done" class="label label-success">Done</span>
            <span ng-if="!child.done" class="label label-warning">In Progress</span>
        </td>
        ...
    </tr>
</tbody>
...

控制器:

...
$scope.change_status = function(todo) {
        todo.done = !todo.done;
        todo.put();
        $rootScope.todos = api.all('todo').getList().$object;
    };
...

示例JSON(在ng-repeat中使用):

[
  {
    "description": null,
    "title": "Learn to make a great todo-app using AngularJS",
    "children": [
      {
        "description": null,
        "title": "Learn AngularJS",
        "children" : [],
        "done": false,
        "user": 1,
        "hidden": false,
        "id": 2
      }
    ],
    "done": false,
    "user": 1,
    "hidden": false,
    "id": 1
  }
]

2 个答案:

答案 0 :(得分:1)

儿童是一个正常的数组,没有进行重新组合,所以你没有restangularla方法,你必须重新组合它(检查restangularizeCollection方法)才能将它用于restangular方法(put)。 父数组已经被重新组合,因为它是通过restangular调用检索的那个。

答案 1 :(得分:1)

我已经使用了customPUT方法,它并不需要我对所有对象进行Restangularize(这本来很难做到):

Restangular.allUrl('edittodo/' + todo.id).customPUT(todo)