2013-10-16 33 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

你说得对,这是一个正确的做法。 –