emberjs 通过搜索加载模型数据

emberjs load the model data with search

我创建了一个路由,用于搜索用户,application.hbs 有搜索表单,下面是我的代码段。

路由器 router.js

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

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

export default Router.map(function() {
  this.resource('search', {path: '/search/:citySef/:group'});
});

路线application.js

import Ember from 'ember';

export default Ember.Route.extend({
  model: function(){
    return Ember.RSVP.hash({
      groups: this.store.find('group'),
      cities: this.store.find('city', {type: 'filled'})
    });
  },
  setupController: function(controller, models) {
    controller.setProperties(models);
  }
});

路线search.js

import Ember from 'ember';

export default Ember.Route.extend({
  model: function(params){
    return Ember.RSVP.hash({
      users: this.store.find('user', {citySef: params.citySef, group: params.group})
    });
  },
  setupController: function(controller, models) {
    controller.setProperties(models);
  }
});

控制器 application.js

import Ember from 'ember';

export default Ember.Controller.extend({
  isProcessing: false,
  selectedCity: null,
  selectedGroup: null,

  actions: {
    submitSearch: function () {
      this.setProperties({
        isProcessing: true
      });

      var citySef = this.get("selectedCity");
      var group = this.get("selectedGroup");

      console.log(citySef, group);
      this.transitionToRoute('search', {citySef:citySef, group:group});
    }
  }
});

控制器 search.js

import Ember from 'ember';

export default Ember.Controller.extend({
});

所以基本上我正在创建一个 url 类似 localhost:4200/search/City/Group 来搜索具有特定组的城市中的用户。

当我按下搜索按钮时,我可以看到地址栏中的 URL 从 localhost:4200 更改为 localhost:4200/search/City/Group 但它不会向服务器发送请求以获取数据来自 REST,但是当我刷新页面时,它会加载数据。

编辑

除了模板,我已经包含了几乎所有内容。

编辑 2015-04-22

我已经将包(没有 bower 和 npm 包)上传到 https://drive.google.com/file/d/0B5slzmNBINvNMHNjcXdqNWlCeUk/view?usp=sharing

我猜你的问题是第一次没有正确设置模型。

首先,当您的路由中有模型函数时,您不必显式调用 setupController 函数,因为模型挂钩会处理所有这些设置。 但是如果你想要那么惯例应该是 -

setupController:function(controller,models){
        controller.set('content',models);
   }

尝试使用上述模式中的设置控制器功能。

根据 Neha 的建议,它与 setupController

有关
 setupController: function (controller, models) {
    if (models.citySef) {
      controller.set('model', this.store.find('user', {citySef: models.citySef, group: models.group}));
    } else {
      controller.set('content', models);
    }

  }

因此,当页面加载时,它进入 else 条件,如果我 transitiontoroute 它进入 if 条件。我认为这可以清理,但到目前为止它对我有用。