无法使用Json对象

时间:2014-12-28 22:03:02

标签: ruby-on-rails json angularjs coffeescript

所以我试图开始使用Angular服务来为我提取数据。

目前我有这项服务从我的rails服务器获取媒体:

angular.module('Test').factory 'MediaShow', ($resource, $http, $routeParams) ->
    class Comments
        constructor: (errorHandler) ->
            @service = $resource('/media/:id.json',
                {id: $routeParams.id},
                {'query': { method: 'GET', isArray: false }}
            )
            @errorHandler = errorHandler

            defaults = $http.defaults.headers
            defaults.patch = defaults.patch || {}
            defaults.patch['Content-Type'] = 'application/json'

        create: (attributes, successHandle) ->
            new @service
            new @service(list: attributes).$save ((list) -> successHandler(list)), @errorHandler

        all: ->
            @service.query((-> null), @errorHandler)

在这里,我尝试在我的一个控制器中使用all()函数:

$scope.init = ->
        @mediumService = new MediaShow(serverErrorHandler)
        requestedData = @mediumService.all()
        $scope.medium = requestedData.medium
        console.log($scope.medium)
        keys = []
        for key of requestedData
            keys.push key
        console.log(keys)

以下是我在控制台中看到的一切:

jsonProblem

正如您所看到的,媒体对象确实存在于我从服务器获取的数据中。但由于某种原因,我无法访问它。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

medium未出现在输出中,因为在您生成该输出的位置不存在。当AJAX请求实际完成时,属性medium将出现在控制台日志之后的某个位置。

属性确实存在于控制台的对象资源管理器中,因为它会随着对象的更改而动态更新。它将始终显示对象的当前状态。

我对Angular一无所知,但你的all方法似乎正在回复一个承诺。您几乎肯定需要等待该承诺完成,然后访问medium中的数据。

类似的东西:

scope.init = ->
    @mediumService = new MediaShow(serverErrorHandler)
    requestedData = @mediumService.all()
    requestedData.done (data) =>
      $scope.medium = data.medium
      console.log($scope.medium)
      keys = []
      for key of requestedData
          keys.push key
      console.log(keys)