ember.js正在努力从视图或控制器转换到

ember.js正在努力从视图或控制器转换到,ember.js,Ember.js,从控制器或视图调用路由的正确方式是什么。例如,我有一张有许多行的桌子。每个行视图都有一个click方法,该方法应该调用路由器。它不工作,我在从控制器或视图导航应用程序时遇到问题 以下是一个例子: App.TableView=Ember.CollectionView.extend({ 标记名:“表”, contentBinding:'controller.rows', itemViewClass:Ember.View.extend({ 标记名:“tr”, 模板:Ember.handlebar.co

从控制器或视图调用路由的正确方式是什么。例如,我有一张有许多行的桌子。每个行视图都有一个click方法,该方法应该调用路由器。它不工作,我在从控制器或视图导航应用程序时遇到问题

以下是一个例子:

App.TableView=Ember.CollectionView.extend({
标记名:“表”,
contentBinding:'controller.rows',
itemViewClass:Ember.View.extend({
标记名:“tr”,
模板:Ember.handlebar.compile(“{view.content.name}”),
单击:函数(){
var路由器,选项卡;
路由器=this.get('controller.target.router');
tab=this.get('content.id');
router.goTab(tab);
}
})
});

下面的帖子很有帮助

在您看来,这是转换逻辑的当前实现:

      click: function(){
          var router, tab;
          router = this.get('controller.target.router');
          tab = this.get('content.id');
          router.goTab(tab);
      }
将其更改为此实现:

  click: function(){
      var router, tab;
      router = this.get('controller.target.router');
      tab = this.get('content.id');
      router.transitionTo(tab);
  }
这就解决了问题。但从您的示例来看,不清楚为什么要在视图中触发转换。状态管理应该始终发生在路由器中。
另一件尴尬的事情是,您从ApplicationController获取行。为什么不使用ArrayController呢。因此,从我的观点来看,似乎有些东西放错了地方。

在您看来,这就是转换逻辑的当前实现:

      click: function(){
          var router, tab;
          router = this.get('controller.target.router');
          tab = this.get('content.id');
          router.goTab(tab);
      }
将其更改为此实现:

  click: function(){
      var router, tab;
      router = this.get('controller.target.router');
      tab = this.get('content.id');
      router.transitionTo(tab);
  }
这就解决了问题。但从您的示例来看,不清楚为什么要在视图中触发转换。状态管理应该始终发生在路由器中。
另一件尴尬的事情是,您从ApplicationController获取行。为什么不使用ArrayController呢。因此,从我的角度来看,似乎有些东西放错了地方。

我同意数据应该放在它自己的控制器中,但对于示例来说不是必需的。如何向表行添加单击事件以导航应用程序而不调用TransitionOn?使表格行可单击是我能想到的最简单的例子,从视图中导航是必要的。其他示例包括接受回调函数的插件。必须有一种正确的方式从视图中导航应用程序。您所说的“导航应用程序而不调用Transitiono”是什么意思?Ember应用程序中的状态始终由路由器/状态管理器处理。您能澄清一下您的问题吗?如何将单击事件添加到转换为显示操作的表行中?您对“显示操作”是什么意思?我再次查看了fiddle,但没有发现一个名为这样的操作。fiddle是一个抽象,它演示了向dom中的一个元素添加一个单击事件,当单击该元素时,该事件将转换为路由器中的另一个操作。我们同意Transition不属于视图,但是如果我们不应该在视图中调用Transition,那么获得确定行为的正确方法是什么。(例如单击表行)我同意数据应该在它自己的控制器中,但对于示例来说不是必需的。如何向表行添加单击事件以导航应用程序而不调用TransitionOn?使表格行可单击是我能想到的最简单的例子,从视图中导航是必要的。其他示例包括接受回调函数的插件。必须有一种正确的方式从视图中导航应用程序。您所说的“导航应用程序而不调用Transitiono”是什么意思?Ember应用程序中的状态始终由路由器/状态管理器处理。您能澄清一下您的问题吗?如何将单击事件添加到转换为显示操作的表行中?您对“显示操作”是什么意思?我再次查看了fiddle,但没有发现一个名为这样的操作。fiddle是一个抽象,它演示了向dom中的一个元素添加一个单击事件,当单击该元素时,该事件将转换为路由器中的另一个操作。我们同意Transition不属于视图,但是如果我们不应该在视图中调用Transition,那么获得确定行为的正确方法是什么。(例如单击表格行)