在Emberjs组件中定义transitionTo

时间:2016-11-23 08:11:53

标签: javascript ember.js

我有一个在多个路线上使用的组件。 现在在该组件中,我想使用来自ember-gestures库的swipeLeft和swipeRight事件。

当我尝试提醒消息时,他们会被两个事件解雇。但是当我试着奔跑的时候 this.transitionTo('someRoute', dynamicPart)然后它就不会被解雇。

我收到Uncaught TypeError: this.transitionTo is not a function(…)错误。

如何使用Ember-component中的transitionTo()

我有3条路线(游览,时间表,soc),并且在ui上有3个标签。 我每次都在调用activity-details组件来显示该活动的所有细节。这是代码:     // activity-details :: component

 next: Ember.computed('listOfThisTypeOfActivities', 'currentActivityId',      function(){
      |> Logic to find out the next activity 
      |> Simply grabbing the currentActivityId and then getting the next item from the listOfThisTypeOfActivities
     }),
    // Similarly I have 'prev' computed property

    swipeRight(next){
      console.log('Right Swipe' ); // this works
      // alert(next.id);
      this.transitionTo('schedule', next.id);
    },

    swipeLeft(e){
      this.transitionTo('schedule', prev.id); // this doesn't work
    },

我想在这些活动之间滑动。即如果我在schedule/1然后在滑动事件上,我应该导航到schedule/2路线。

另一个问题是=>我有3种类型的活动:社交活动,时间表,旅游(每个都有自己的路线)。因此,在组件本身中编写nextprev计算属性似乎是错误的。 我们也不使用ember-data,这个活动列表来自服务。 每条路线(/ tours /,/ schedule /)都有自己的活动清单(即旅行和时间表都只是活动)。

更新

在@torazaburo和@Patsy Issa以及@ kumkanilam的建议之后: 1.我已将nextprev计算属性移动到控制器。 2.我已经通过关闭动作将路由导航的逻辑移动到控制器。 这一切都在发挥作用。

虽然我在所有3个控制器中编写了大致相似的代码,但我确信它可以改进。我只是不知道如何。但我很高兴能够让它发挥作用。

非常感谢@torazaburo,@ patsyIssa和@kumkanilam的反馈,并向我展示了更好的方式。

1 个答案:

答案 0 :(得分:1)

this.transitionTo是一种特定于路线的方法。在引擎盖下它调用私人Ember路由器服务。您将需要将私有路由服务注入到组件中(一旦释放新的Ember路由器,可能会中断)或将您的转换请求发送到路由中的操作。