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 条件。我认为这可以清理,但到目前为止它对我有用。
我创建了一个路由,用于搜索用户,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 条件。我认为这可以清理,但到目前为止它对我有用。