А причем тут директива ng-init? В приведенном вами же примере нету вообще ничего такого.
Данные не должны быть храниться в шаблоне, ну тоесть в атрибутах в виде текста, что бы пришлось потом руками парсить. Если вы внимательно посмотрите на то, что будет на выходе приведенного вами примера, то увидите следующее:
Допустим наша коллекция будет иметь вид
[{id: 1, username: 'foo'}, {id: 2, username: 'bar'}];
тогда пользователю придет следующий шматок html:
<script>
var accounts = new Backbone.Collection;
accounts.reset([{id: 1, username: 'foo'}, {id: 2, username: 'bar'}]);
</script>
следовательно никакого парсинга руками backbone не производит.
Что можно сделать в angular. Можно объявить модуль-константу, которую будет использовать основное приложение. Если переделать приведенный вами же пример выйдет так:
<script>
angular.module('prefetchedData', [])
.constant('users', <%= @accounts.to_json %>)
.constant('projects', <%= @projects.to_json(:collaborators => true) %>);
</script>
В основном приложении уже можно инджектить эти данные куда вам нужно. и обрабатывать при той же инициализации. У этого способа есть свои недостатки, в частности ваше приложение начинает зависит от какого-то модуля prefetchedData, но зато мы избавляемся от необходимости делать эти данные глобальными, что даже лучше чем в случае с backbone где для этого надо было лепить кастыль, ну и опять же разруливать эти данные можно напрямую в сервисах, что так же удобно.