Ich bin seit ungefähr einem Tag an einem Problem fest, das ich nicht durchschauen kann.
Ich habe den folgenden Code in einer Datei users.js.coffee:
app = angular.module("app", ["ngResource"])
app.config ['$routeProvider', '$locationProvider', ($routeProvider, $locationProvider) ->
$locationProvider.html5Mode(true)
$routeProvider.when('/users/:id', {templateUrl: '/users/:id.json', controller: UserCtrl})
$routeProvider.when('/users/:id/videos', {templateUrl: '/users/:id/videos.json', controller: UserCtrl})
]
app.factory "User", ["$resource", ($resource) ->
$resource("https://stackoverflow.com/users/:id", {id: "@id"}, {
show: {method: "GET"},
videos: {method: "GET", isArray:true}
})
]
@UserCtrl = ["$scope", "$location", "$route", "http", "$routeParams", "User", ($scope, $location, $route, $http, $routeParams, User) ->
console.log($location)//LocationUrl {$$parse: function, $$compose: function, $$rewriteAppUrl: function, $$protocol: "http", $$host: "localhost"…}
console.log($route)//Object {routes: Object, reload: function}
console.log($routeParams)//Object {}
]
Warum $ routeParams ein leeres Objekt sein würde? Wenn ich $ route.current.params in einer Ansicht aufruft, werden die entsprechenden Parameter angezeigt. Aber nicht im Controller. Außerdem kann ich $ route.current.params nicht im Controller aufrufen, weil "current" noch nicht definiert ist.
das hängt nicht mit Ihrer Frage zusammen, aber ich glaube nicht, dass Sie 'to_json' verwenden können, wenn Sie' respond_with' verwenden. Sie müssen ein Objekt bereitstellen, und Ihr Controller ruft den entsprechenden Responder entsprechend dem angeforderten Format auf. –
Ich denke, du hast generell Recht, außer ich brauche eine Assoziation wie @ user.to_json (include:: videos). Ich habe es einfach dort, um es explizit zu machen, bis ich herausfinden kann, warum ich nicht die passende Antwort bekomme. – jflores
Die bevorzugte Methode zum Einbeziehen von Zuordnungen in eine JSON-Antwort besteht darin, 'as_json' in Ihrem Modell zu überschreiben. Was dein Problem anbelangt, kannst du deinen Browser so einstellen, dass er xhr-Anfragen protokolliert (Chrome tut das) und hier posten, was genau hin und her kommt? –