2013-06-05 28 views
5

içine almak için AngularJS'yi kullanıyorum. AngularJS'yi, Railscast numaralı bağlantıya dayanarak Rails uygulamasına başlatmaya çalışıyorum. Sorum şu soruya benzer: Angular JS ngResource with nested resources, ancak benim sorunum için bir çözüm bulamadım.İç içe geçme kaynağını Rails

Şu anda, bir üst kısmi aracılığıyla üst kaynak görünümünde görüntülediğim iç içe geçmiş bir kaynağa sahibim. Ben görevlerini almak üzere sorguda PROJECT_ID sağlamanız gerekir, bu yüzden vardır:

app.factory "Task", ["$resource", ($resource) -> 
    $resource("/projects/:project_id/tasks/:id", {project_id: "@project_id", id: "@id"}, {update: {method: "PUT"}}) 
] 

@TaskCtrl = ["$scope", "Task", ($scope, Task) -> 
    $scope.tasks = Task.query({project_id: "@project_id", id: "@id"}) 

Sorum şu, nasıl ayarlanır son satırında, böylece görünümünde '@project_id' do my Örnekte kontrolörde değer erişilebilir mi? Ben ng-init kullanarak çalıştı:

benim TaskCtrl denetleyicisi Ancak bir kez
<div ng-controller="TaskCtrl" ng-init="project_id = <%= @project.id %>"> 

'PROJECT_ID' boştur ve '$ scope.project_id' da çalışmıyor. Herhangi bir yardım takdir edilir.

cevap

5

ng-init, denetleyici başlatmadan önce değil, şablon yürütme işleminden önce çalışır. Yalnızca şablon proje_id'in farkındaysa, proje kimliğini tutan ve denetleyicinize enjekte eden bir paylaşılan hizmet (bu basit bir fabrika değeri olabilir) oluşturun. Bu angularjs aracılığıyla sorunu çözmek etmese de Sen ... değil kahve için

<div ng-controller="ProjectIDController"> 
    <span ng-init="project_id = <%= @project.id %>"></span> 
</div> 

<div ng-controller="TaskCtrl"> 
    ... 
</div> 

function ProjectIDController($scope, sharedService) { 
    $scope.$watch('project_id', function (UID) { 
     sharedService.setProjectID($scope.project_id); 
    }); 
} 

function TaskCtrl ($scope, Task, sharedService) { 
    $scope.tasks = Task.query({project_id: sharedService.getProjectId()... 
} 

üzgün TaskController

önce başlatıldı başka denetleyicisinden

+0

Teşekkür deneyebilirsiniz. Soru: ProjectID Controller tarafından ng-init'e erişiliyorsa, neden project_id açıklığını Görev Denetleyicisine taşıyamıyorum? Angularjs için yeniyim, ama değerler Kontrolöre dahil edilmişse, kapsamdan erişilebilir olması gerektiği anlaşılıyor. – Drew

+1

Elbette, bunu yapabilirsin, ancak controller_it üzerinde bir değeri olmadığı için, $ project_id'i izlemek zorundasın. Ama eğer ProjectCidl için başka bir kontrolörde kardeşe ihtiyaç duyarsanız, project_id'i göremezsiniz, sadece çocuklar olacaktır. Hizmetin geldiği yer. – Oliver

+0

Tüm yardımlarınız için teşekkürler, ancak bu benim için pek işe yaramadı ... Değeri geçmek için gon gemini kullandım. AngularJS'de görünümden normal alan değerlerinin elde edilmesi biraz daha kolay gibi görünüyor. – Drew

0

o hizmeti doldurabilir, sadece üzeri değerinde geçen sona erdi gon mücevher:

projeler kontrolörü:

def show 
    gon.project_id = @project.id 
    . 
    . 
    end 

kahve js dosyası:

$scope.tasks = Task.query({project_id: gon.project_id}) 
+0

Bu yöntemi kullanırken 'gon tanımlı değil 'alıyorum. Herhangi bir fikir? –

İlgili konular