Ember.js 如何将id存储在变量中,从而过渡到包含模型id的路由?

Ember.js 如何将id存储在变量中,从而过渡到包含模型id的路由?,ember.js,Ember.js,这是我的router.js: import Ember from 'ember'; import config from './config/environment'; var Router = Ember.Router.extend({ location: config.locationType }); Router.map(function() { this.route('category', {path: '/category/:category_id'}); this.r

这是我的router.js:

import Ember from 'ember';
import config from './config/environment';

var Router = Ember.Router.extend({
  location: config.locationType
});

Router.map(function() {
  this.route('category', {path: '/category/:category_id'});
  this.route('listing', {path: '/listing/:listing_id'});
});

export default Router;
我试图这样做,当用户从导航栏组件中选择一个选项时,他们将被重定向到相应的categories/category_id页面。我能够在navbar组件中的变量中获得正确的ID,但我的this.transitiono语句不起作用。以下是navbar-header.js:

从“余烬”导入余烬

export default Ember.Component.extend({
  model() {
     return this.store.findAll('category');
   },
   actions: {
     categorySelected: function(){
       debugger;
       var e = document.getElementById("categories");
       var catId = e.options[e.selectedIndex].value;
       //I have verified that catId contains the appropriate ID at this point.

       //Where the error happens:
      this.transitionTo('/category/' + catId);
     }
   }
});
我做错了什么


编辑:提醒大家,你不能从一个组件进行转换,你必须使用一个动作并将其发送回路由。正如joshfarrent所说,它应该是这样的。过渡到('category',catId)

您需要在
转换中将Id作为单独的参数传递到
,并删除斜杠,如下所示:

this.transitionTo('category', catId);
请参阅余烬路线文档的“转换到”部分

我还建议不要使用HTML元素的值来确定选择了哪个项目,而应该在模板中的每个动作帮助器上执行以下操作:

{{action "categorySelected" VALUE}}
只需将值替换为您在HTML元素上设置的相同数值。这样,元素的值将传递给
类别selected
函数,如下所示:

categorySelected: function(value) {
   debugger;

   this.transitionTo('category', value);
 }

最后,是否有理由不只是使用
{{{link to}
帮助程序来实现相同的效果?

您需要在
转换中将Id作为单独的参数传递到
,并删除斜杠,如下所示:

this.transitionTo('category', catId);
请参阅余烬路线文档的“转换到”部分

我还建议不要使用HTML元素的值来确定选择了哪个项目,而应该在模板中的每个动作帮助器上执行以下操作:

{{action "categorySelected" VALUE}}
只需将值替换为您在HTML元素上设置的相同数值。这样,元素的值将传递给
类别selected
函数,如下所示:

categorySelected: function(value) {
   debugger;

   this.transitionTo('category', value);
 }

最后,是否有理由不只是使用
{{{link to}
帮助程序来实现相同的效果?

您需要在
转换中将Id作为单独的参数传递到
,并删除斜杠,如下所示:

this.transitionTo('category', catId);
请参阅余烬路线文档的“转换到”部分

我还建议不要使用HTML元素的值来确定选择了哪个项目,而应该在模板中的每个动作帮助器上执行以下操作:

{{action "categorySelected" VALUE}}
只需将值替换为您在HTML元素上设置的相同数值。这样,元素的值将传递给
类别selected
函数,如下所示:

categorySelected: function(value) {
   debugger;

   this.transitionTo('category', value);
 }

最后,是否有理由不只是使用
{{{link to}
帮助程序来实现相同的效果?

您需要在
转换中将Id作为单独的参数传递到
,并删除斜杠,如下所示:

this.transitionTo('category', catId);
请参阅余烬路线文档的“转换到”部分

我还建议不要使用HTML元素的值来确定选择了哪个项目,而应该在模板中的每个动作帮助器上执行以下操作:

{{action "categorySelected" VALUE}}
只需将值替换为您在HTML元素上设置的相同数值。这样,元素的值将传递给
类别selected
函数,如下所示:

categorySelected: function(value) {
   debugger;

   this.transitionTo('category', value);
 }

最后,有没有理由不只是使用
{{link to}}
助手来达到同样的效果?

控制台中出现了什么错误?{{{link to'category'category\u id}}}link{{/link to}控制台中出现了什么错误?{{35; link to'category'categegory\u id}}link{/link to}您在控制台中遇到的错误是什么?{{{#链接到'category'category_id}}链接{{/link to}}您在控制台中遇到的错误是什么?{{{#链接到'category'category_id}链接{/link to}谢谢,重定向行最终起作用了,但请注意:您无法直接从组件进行转换,您必须使用sendAction和action处理程序从路由进行转换。至于为什么我不能只做链接,它是一个下拉选项框。啊,好吧,我没有发现它是你最初问题中的一个组件。很高兴它有帮助!谢谢,重定向行最终成功了,但请注意:事实证明,您不能直接从组件执行转换,您必须使用sendAction和action处理程序从路由执行转换。至于为什么我不能只做链接,它是一个下拉选项框。啊,好吧,我没有发现它是你最初问题中的一个组件。很高兴它有帮助!谢谢,重定向行最终成功了,但请注意:事实证明,您不能直接从组件执行转换,您必须使用sendAction和action处理程序从路由执行转换。至于为什么我不能只做链接,它是一个下拉选项框。啊,好吧,我没有发现它是你最初问题中的一个组件。很高兴它有帮助!谢谢,重定向行最终成功了,但请注意:事实证明,您不能直接从组件执行转换,您必须使用sendAction和action处理程序从路由执行转换。至于为什么我不能只做链接,它是一个下拉选项框。啊,好吧,我没有发现它是你最初问题中的一个组件。很高兴它有帮助!