2013-09-01 2 views
0

Я заметил, что AngularJS требует результатов в javascript с внешнего сервера.AngularJS Callbacks on Rails

Текущий сервер в этом примере возвращает angular.callbacks._0({"key": "value"}); с заголовками javascript. Как сделать возврат в том же формате в Rails? Благодаря!

AngularJS генерирует http://echo.jsontest.com/key/value?callback=angular.callbacks._0 ссылку из этого запроса по умолчанию

Вот мой рабочий пример:

<!DOCTYPE html> 
<html ng-app="Simple"> 
<body> 
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js"></script> 
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular-resource.min.js"></script> 
<div ng-controller="SimpleController">  
    {{some_item.key}} 
</div> 
<script> 
angular.module('Simple', ['ngResource']); 
function SimpleController($scope, $resource) { 
    $scope.simple = $resource('http://echo.jsontest.com/key/value', 
     {callback:'JSON_CALLBACK'}, 
     {get:{method:'JSONP'}} 
    ); 
    $scope.some_item = $scope.simple.get(); 
    console.log($scope.some_item.key); 
} 
</script> 
</body> 
</html> 

ответ

1

До тех пор, пока у вас есть RESTful контроллер в ответ на JSON будет работать нормально.

class ArticlesController < ApplicationController 
    respond_to :json 

    def index 
    articles = Article.all 
    respond_with articles 
    end 

    def get 
    article = Article.find(params[:id]) 
    respond_with article 
    end 

    # etc. 
end 

Вы можете ограничить атрибуты возвращаемые с помощью respond_with article, include: {:id, :title, :description}

+0

но JSONP требует обратного вызова функции JavaScript? – Gediminas

+1

Вам не нужно использовать JSONP, Угловой $ ресурс ожидает простой JSON. Пока ваш контроллер реагирует на индекс, покажет, создаст, уничтожит и обновит (или подмножество, которое вам нужно), вы можете использовать $ resource, как в вашем примере. Посмотрите на документацию Angular для [$ resource] (http://docs.angularjs.org/api/ngResource.$resource), особенно на примерах. В общем, если вы создаете эшафот в рельсах, он должен работать из коробки с угловым. Кроме того, в вашем примере я бы ожидал '$ scope.some_item = $ scope.simple.get();' принимать аргумент (он будет маршрутизирован для отображения в вашем контроллере). – taglia