显示与您在搜索框余烬中放置的值不同的网址

时间:2015-12-21 20:51:41

标签: ember.js

我在管理页面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中获取用户模型。有人能给我一个线索吗?

1 个答案:

答案 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
  }
}