返回包含 ember 中的字符串的记录
Returning a record with a string in ember
我正在尝试实现一个搜索功能,用户可以通过组件传递用户名来 return 其他用户。我遵循了 ember 指南,并在我的路线文件中使用了以下代码:
import Ember from 'ember';
export default Ember.Route.extend({
flashMessages: Ember.inject.service(),
actions: {
searchAccount (params) {
// let accounts = this.get('store').peekAll('account');
// let account = accounts.filterBy('user_name', params.userName);
// console.log(account);
this.get('store').peekAll('account')
.then((accounts) => {
return accounts.filterBy('user_name', params.userName);
})
.then((account) => {
console.log(account);
this.get('flashMessages')
.success('account retrieved');
})
.catch(() => {
this.get('flashMessages')
.danger('There was a problem. Please try again.');
});
}
}
});
然而,此代码抛出以下错误:
"You cannot pass '[object Object]' as id to the store's find method"
我认为 .find
方法的这种实现不再有效,我需要以不同的方式 return 处理该对象。我该怎么做?
DS.Store#find 在 Ember 数据的现代版本中不是有效方法。如果用户已经在商店中,您可以查看和筛选他们:
this.store.peekAll('account').filterBy('user_name', params.userName);
否则,您需要使用与之前问题相同的方法,query
它们(假设您的后端支持过滤):
this.store.query('account', { filter: { user_name: params.userName } });
你不能为 filterBy
做 .then
。
你不能为 peekAll
做 .then
。因为两者都不会 return Promise。
调用异步代码并在 searchAccount
内部和 returning 结果在这里没有多大意义。因为 searchAccount
会在异步代码完成之前很快 return。
this.get('store').findAll('account',{reload:true}).then((accounts) =>{
if(accounts.findBy('user_name', params.userName)){
// show exists message
} else {
//show does not exist message
}
});
以上代码会联系服务器,得到所有的结果然后做findBy过滤。所以过滤是在客户端完成的。而不是这个你可以查询,
this.store.query('account', { filter: { user_name: params.userName } }).then(accounts =>{
//you can check with length accounts.length>0
//or you accounts.get('firstObject').get('user_name') === params.userName
//show success message appropriately.
});
我正在尝试实现一个搜索功能,用户可以通过组件传递用户名来 return 其他用户。我遵循了 ember 指南,并在我的路线文件中使用了以下代码:
import Ember from 'ember';
export default Ember.Route.extend({
flashMessages: Ember.inject.service(),
actions: {
searchAccount (params) {
// let accounts = this.get('store').peekAll('account');
// let account = accounts.filterBy('user_name', params.userName);
// console.log(account);
this.get('store').peekAll('account')
.then((accounts) => {
return accounts.filterBy('user_name', params.userName);
})
.then((account) => {
console.log(account);
this.get('flashMessages')
.success('account retrieved');
})
.catch(() => {
this.get('flashMessages')
.danger('There was a problem. Please try again.');
});
}
}
});
然而,此代码抛出以下错误:
"You cannot pass '[object Object]' as id to the store's find method"
我认为 .find
方法的这种实现不再有效,我需要以不同的方式 return 处理该对象。我该怎么做?
DS.Store#find 在 Ember 数据的现代版本中不是有效方法。如果用户已经在商店中,您可以查看和筛选他们:
this.store.peekAll('account').filterBy('user_name', params.userName);
否则,您需要使用与之前问题相同的方法,query
它们(假设您的后端支持过滤):
this.store.query('account', { filter: { user_name: params.userName } });
你不能为 filterBy
做 .then
。
你不能为 peekAll
做 .then
。因为两者都不会 return Promise。
调用异步代码并在 searchAccount
内部和 returning 结果在这里没有多大意义。因为 searchAccount
会在异步代码完成之前很快 return。
this.get('store').findAll('account',{reload:true}).then((accounts) =>{
if(accounts.findBy('user_name', params.userName)){
// show exists message
} else {
//show does not exist message
}
});
以上代码会联系服务器,得到所有的结果然后做findBy过滤。所以过滤是在客户端完成的。而不是这个你可以查询,
this.store.query('account', { filter: { user_name: params.userName } }).then(accounts =>{
//you can check with length accounts.length>0
//or you accounts.get('firstObject').get('user_name') === params.userName
//show success message appropriately.
});