ember路由 - 将param传递给子路由,其中​​param将在存储检索中用作过滤器参数

时间:2015-02-10 21:47:42

标签: ember.js routes nested state

我有一个场景,其中有“求职者” - 求职者属于“businessunits”,“系统应用”和“课程”&最后,“businessunits”拥有上述所有内容。

进入项目时,您可以从“businessunits”路线(#/ businessunits)开始,在那里它们被列为“#link-to”,它们链接到一个节目视图,点击后将您移到#/ businessunits /: businessunits_id

当您到达此模板时,可以选择通过“systemapplication”,“course”或“show all”查看当前“Businessunit”相关的“Jobaids”

由于考虑到模型关系(以及因为我是ember的新手)而开始的最简单的地方,是“全部显示”选项,这就是我开始的地方。

所以 - 我需要做的是在...中获取:businessunit_id

#/ businessunit /:businessunit_id

可以通过

中的处理看到

#businessunit /:businessunit_id / jobaids

...能够应用于那条路线,一个由类似的东西组成的模型 this.store.find('jobaid',{businessunit_id:ID-FROM-PARENT-ROUTE})

到目前为止,我有......

/app/router.js

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

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

Router.map(function() {
  this.resource("businessunits", function() {
    this.route("show", { path: ":businessunit_id" }, function(){
	  this.resource("jobaids", function() {});
    });
  });
});

export default Router;

...以及通向我需要父ID值的路线的“show all”链接是一个带有{{action“getJobaids”}}的实际锚标记,它与/中的show一起处理app / routes / businessunits.js route

import Ember from 'ember';

export default Ember.Route.extend({
	model: function(){
		return this.store.find('businessunit');
	},
	actions: {
		getJobaids: function(){
			var url = location.href.split('/');
			window.unitClicked = url[url.length-1];

			this.transitionTo('jobaids');
		}
	}
});

然后当你到达/app/routes/jobaids.js时,我们从窗口获得了所需的id ...

import Ember from 'ember';

export default Ember.Route.extend({
	model: function(){
		return this.store.find('jobaid', {businessunit_id: unitClicked});
	}
});

这是可怕的,但这足以让我进入下一个路线(我还有一些其他问题,我还没有想到有关查询夹具和/或适配器) - 但这不是一个理想的修复,永远不会保持状态,基本上最终导致链接时缺少(必要的)变量

#/ businessunits /未定义/ jobaids

你可以想象打破一切 - 所以我如何以真正的余烬方式做到这一点,而不依赖于使用裸骨js的hacky?

1 个答案:

答案 0 :(得分:0)

我最终将这个项目的开发转向了一个实际的数据库后端进行查询,并让ember的数据库中的关系处理嵌套的对象结构来访问JSON结构中返回的关系。