2013-02-19 54 views
0

乾杯!我有兩個控制器,我想從TravelClient.TourController訪問takenSeatsNumbersEmber.js通過控制器之間的屬性

TravelClient.TourController = Ember.ObjectController.extend({ 
    needs: ['tour.seats'] 
}); 

TravelClient.TourSeatsController = Ember.ObjectController.extend({ 
    takenSeatsNumbers: [] 
}); 

我是否以正確的方式使用needs?以及如何從tour模板獲得takenSeatsNumbers

回答

1

正如上面提到的,這是一個current bug等上面會看似工作,但不會像jsFiddle演示的那樣在現實中運作。目前的解決方案是通過路由器中的this.controllerFor傳遞控制器的實例。這遠非理想,但現在就足夠了。

它的發生是因爲灰燼是指使用dot.notation控制器,而如果你使用駝峯或* under_scores *的話就會產生你不同的實例。

的解決方案是從您的路線注入控制器,就像這樣:

TravelClient.IndexRoute = Ember.Route.extend({ 
    setupController: function(controller) { 
     var tourSeatsController = this.controllerFor('tour.seats'); 
     tourSeatsController.set('takenSeatsNumbers', [1,2,3]); 
     controller.set('tourSeatsController', tourSeatsController); 
    } 
}); 

然後你就可以在你的視圖使用它:{{tourSeatsController.takenSeatsNumbers.length}}

+0

非常有幫助,謝謝你的解釋。 – xamenrax 2013-02-19 11:03:30

+0

還有一個虛擬問題:如果「TourSeatsController」上下文中的模型已更改,如何將'takenSeatsNumbers'設置回[]? – xamenrax 2013-02-19 13:05:52

+0

你有'.clear()'。 – Wildhoney 2013-02-19 13:07:55

0

這個代碼是基於燼,PRE4。從另一個控制器屬性的代理似乎是一個模式這種方式有可能成爲與混入的幫助概括:

TravelClient.TourController = Ember.ObjectController.extend({ 
    needs: ['tourSeats'], 
    someMethod : function(){ 
    var tourSeatsController = this.get("controllers.tourSeats"); 
    // do something with it 
    }, 
    takenSeatsNumbers : function(){ //proxy the property 
    return this.get("controllers.tourSeats.takenSeatsNumbers") 
    }.property("controllers.tourSeats.takenSeatsNumbers") 
}); 

TravelClient.TourSeatsController = Ember.ObjectController.extend({ 
    takenSeatsNumbers: [] 
}); 
+0

謝謝!使用RC.1的功能,我可以只寫'需求:[ 'tourSeats']' 然後在'tour'模板:'{{controllers.tourSeats.takenSeatsNumbers}}' – xamenrax 2013-02-19 10:18:59

+1

你必須要小心,因爲'tourSeats '將會是控制器的另一個實例:http://jsfiddle.net/CzyWM/我已經發布了下面的臨時解決方案,但是期望這個解決方案適用於1.0:https://github.com/emberjs/ember。 js/issues/2025 – Wildhoney 2013-02-19 10:21:27

+0

這可能是點符號的問題。如果你不使用它,那麼它會工作。這是一個基於你的工作小提琴:http://jsfiddle.net/mavilein/CzyWM/1/ – mavilein 2013-02-19 11:25:03