2013-10-16 56 views
5

我的路線裏面的「約會」下面我可以達到並獲得父「天」的模式如何從控制器內部獲取父路線模型?

App.Router.map(function(match) {           
    this.resource("day", { path: "/day/:day" }, function() {    
     this.resource("appointments", { path: "/appointments" }, function() { 
      this.route("new", { path: "/:appointment_start/new" }); 
      this.route("edit", { path: "/:appointment_id/edit" });   
     });                
    });                 
}); 

但是,當我是新的或編輯路線內心深處,我怎麼能可達(從行動處理程序中),並像我在路線中一樣抓住父母的「日」模型?

App.AppointmentsEditController = Ember.Controller.extend({     
    actions: { 
     updateAppointment: function(appointment) { 
      var day = this.get('??'); 
     } 
    } 
}); 

更新

最終控制代碼現在看起來像這樣

App.AppointmentsEditController = Ember.Controller.extend({  
    needs: 'day',   
    actions: { 
     updateAppointment: function(appointment) { 
      var day = this.get('controllers.day'); 
     } 
    } 
}); 

回答

4

Toran - 抱歉,這是添加一個額外的答案,我還不能評論 - 是的,它應該是免費的。您可以從actions塊內訪問controllers.post這樣的:

var postController = this.get('controllers.post') 
+0

謝謝!這工作正如你所建議的(我只需要添加需要的一天行來獲得它100%) –

+0

你好,我正在嘗試這樣做,而是試圖獲得父Appointment而不是在AppointmentEdit控制器的一天。我嘗試使用this.get('controllers.appointments'),但我得到一個約會數組,而不是我正在編輯的特定的約會。你能否告知如何獲得正在編輯的預約?我可以使用上面的方法獲得控制器內的所有約會*的數組。我可以在路由*中獲取params.appointment_id *。但我無法弄清楚如何在任何一方中獲得預約。 –

+0

*通過將數組保存到控制器屬性,然後從路由中獲取該屬性並轉到特定的param.appointment_id索引來修復上述問題。看起來過於複雜...也許有更好的方法? –

2

有簡單的方法來做到這一點。在AppointmentsEditController添加

needs: "day" 

然後你就可以通過this.get('controllers.day')訪問day控制器。

我總是用這樣的:

App.CommentsControler = Ember.Controller.extend({ 
    needs: "post", 
    postBinding: "controllers.post", 
    ... 
    postName: function() { 
     return this.post.name; 
    }.property("post.name") 
}) 

看看這篇文章http://emberjs.com/guides/controllers/dependencies-between-controllers/

的,我希望這個幫助:)

+1

爲了評論控制器中使用'day'控制器,你必須使用'this.get(「controllers.day」);而不是' 'this.controllers.day',否則它將無法識別控制器是什麼。 –

+0

你說得對,這是一個正確的做法。 –