我在管理页面admin.hbs
上有一个搜索框,如下所示:
{{input value=search class="wide input" placeholder="Inquiry ID or User Email"}}
<div class="medium info btn" {{action 'search' search}}><button {{bind-attr class="isLoading:loading"}} >Search</button></div>
在admin_controller.js
中,搜索操作如下所示:
search: function(search){
if (!this.get('isLoading')){
this.set('isLoading', true);
if(search.indexOf('@') == -1){
this.transitionToRoute('inquiry', search);
} else {
this.transitionToRoute('user', search);
}
this.set('isLoading', false);
}
}
此功能检查输入是查询ID还是用户电子邮件,然后转换到不同的路径以获取正确的数据。我的问题是用户搜索,所以我只会显示与用户搜索相关的代码。这是router.js
:
App.Router.map(function(){
this.resource("inquiry", {path: "inquiry/:inquiry_id"});
this.route("user", {path: "user/:email"});
});
这是user_route.js
:
App.UserRoute = Ember.Route.extend({
queryParams: {
email: {
refresh: true,
}
},
model: function(params){
return this.store.find('user', {email: params.email}).then(function(users{
if (users){
return users.get('firstObject');
}
});
},
setupController: function(controller, model){
this._super(controller, model);
controller.set('isLoading', false);
}
});
目前网址总是如下:../admin/user/test1@gmail.com
我希望它像:../admin/user/1
我的意思是代替显示我放在搜索框中的电子邮件,我希望网址显示用户ID,这也是用户模型中的属性。我现在有一个解决方案:根据用户电子邮件获取admin_controller.js
中的用户模型。然后获取用户ID并将模型传递给user_route.js
。但我不知道如何在admin_controller.js
中获取用户模型。有人能给我一个线索吗?
答案 0 :(得分:0)
您需要在admin_controller.js
中执行搜索,但可以这样做:
actions: {
search: function(search) {
if (!this.get('isLoading')){
this.set('isLoading', true);
this.performSearch(search, search.indexOf('@') == -1).then(function() {
this.set('isLoading', false);
});
}
}
},
// performSearch should be a normal method on the controller, not in the actions hash
performSearch: function(searchQuery, isUserSearch) {
if(isUserSearch) {
return this.store.find('user', {email: params.email}).then(function(users{
if (users){
const firstUser = users.get('firstObject');
this.transitionToRoute('user', firstUser);
}
});
} else {
return ... // put your inquiry search code here, fetch the model and transition
}
}