我的问题的示例代码在这里。这是一个简单的 Ember 应用程序,默认显示包含 TextField 的 SearchView。
当用户输入一些文本并按 Enter 键时,我想通过在文本框中输入的值转换到另一个状态(displayUserProfile)。
起初,在 Textbox 的insertNewline回调中,我调用了应用程序路由器的transitionTo方法,将值作为参数对象的一部分传递:
App.SearchTextFieldView = Em.TextField.extend({
insertNewline: function() {
App.router.transitionTo('displayUserProfile', {
username: this.get('value')
});
}
});
这很好用,但后来我注意到 pangratz 对有关无限滚动的问题的回答使用了不同的方法。相反,他调用视图控制器上的一个方法,该控制器又调用控制器目标(即路由器)上的一个方法。
这将我的代码更改为:
App.SearchTextFieldView = Em.TextField.extend({
insertNewline: function() {
Em.tryInvoke(this.get('controller'), 'displayUserProfile', this.get('value').w());
}
});
App.SearchController = Em.Object.extend({
displayUserProfile: function(username) {
this.get('target').transitionTo('displayUserProfile', {
username: username
});
}
});
我的问题是:哪种方法更好?直接从视图调用transitionTo或将其委托给视图的控制器?