我想知道从不同的非嵌套路由控制器访问路由模型的适当方法。 如果我的路线设置如下:(但这有效,不确定是否正确)
App.Router.map(function() {
this.route('admin');
this.route('page1');
}
Page 1路线的模型如下:
App.page1Model = {content:'Content of simple model'};
App.Page1Route = Ember.Route.extend({
model(){
return App.page1Model;
});
然后管理员想要访问page1路由,我只能这样做:
App.AdminController = Ember.Controller.extend({
page1Model:App.page1Model,
Now do stuff with page1Model.....
});
我曾尝试使用Ember.inject.controller()但是当我的路由嵌套并且我想从子进入父控制器时,这只适用于我。有没有办法使用这种语法来获得我想要的东西,还是有比现在更好的方法?
由于
答案 0 :(得分:2)
您要求的内容存在固有问题:当用户在admin
页面上时,他们不在page1
页面上,因此没有page1
上下文。您可能想问一些问题:
/admin
前往/page1
会怎样?/page1
然后/page2
然后转到/admin
会怎样?我可以想到两种 Ember-esque 做你想做的事情的方式:
Ember.Service
,其中包含Page1Model
的实例。您将服务注入route:page1
和route:admin
,然后让它们分别关闭实例。他们是否可以更改模型的哪个实例取决于您。在Page1Model
的{{1}}挂钩中返回model
个实例。此路线位于route:application
和route:page1
之上,因此他们都可以按如下方式查找模型:
// route:application model(){ return App.Page1Model.create(); }
// route:page1 model(){ return this.modelFor('application'); }
答案 1 :(得分:0)
我能够通过使用寄存器和注入来实现我的目标。有人可以看看,如果这是通过Ember标准“正确”或者有更好的方法(@James A. Rosen :)),请告诉我吗?
OH!如果有更好的方法将模型附加到page1路线,请告诉我。虽然我不确定我是否喜欢create()之后的.model。
JSBIN:http://jsbin.com/tikezoyube/1/edit?html,js,output
JS的那个:
var App = Ember.Application.create();
var page1Model = {title:'Old Title'};
var page1ModelFactory = Ember.Object.extend({
model : page1Model
});
App.Router.map(function(){
this.route('page1');
this.route('admin');
});
App.register('model:page1', page1ModelFactory);
App.inject('controller:admin','page1Model','model:page1');
App.Page1Route = Ember.Route.extend({
model(){ return page1ModelFactory.create().model; }
});
App.AdminController = Ember.Controller.extend({
actions:{
updateTitle:function(){
console.log(this.get('page1Model').model.title);
this.get('page1Model').set('model.title','THE NEW TITLE!');
console.log(this.get('page1Model').model.title);
this.transitionToRoute('page1');
}
}
});
谢谢!