Javascript 不使用query()方法使用Ember.js从模型中检索任何信息
我试图通过使用前端的框架和后端的node.js以及作为数据库的mongoDB构建一个web应用程序来学习Ember.js 我正在使用/试图使用url输入参数id,然后查询该id 我很难从我的模型中获取信息。当我使用findAll时,我的查询工作正常。但是,当我切换到查找或查询时,我无法检索任何结果 我看过的所有文档都使用了我尝试过的不同语法,但没有一个有效 如果有任何提示或意见,我将不胜感激。多谢各位 app/router.jsJavascript 不使用query()方法使用Ember.js从模型中检索任何信息,javascript,node.js,ember.js,routes,ember-data,Javascript,Node.js,Ember.js,Routes,Ember Data,我试图通过使用前端的框架和后端的node.js以及作为数据库的mongoDB构建一个web应用程序来学习Ember.js 我正在使用/试图使用url输入参数id,然后查询该id 我很难从我的模型中获取信息。当我使用findAll时,我的查询工作正常。但是,当我切换到查找或查询时,我无法检索任何结果 我看过的所有文档都使用了我尝试过的不同语法,但没有一个有效 如果有任何提示或意见,我将不胜感激。多谢各位 app/router.js Router.map(function() {
Router.map(function() {
this.route('stock', { path: '/:stock_id' });
});
app/routes/stock.js
export default Ember.Route.extend({
model: function(params) {
this.store.query('stock', {filter:{id : params.stock_id}}).then(function(stock){return stock.get('firstObject')});
}
});
export default DS.Model.extend({
Symbol: DS.attr('string'),
Name: DS.attr('string'),
LastSale: DS.attr('string'),
MarketCap: DS.attr('string'),
IPOyear: DS.attr('string'),
Industry: DS.attr('string')
});
export default DS.RESTSerializer.extend({
primaryKey: '_id',
serializeId: function(id) {
return id.toString();
}
});
app/models/stock.js
export default Ember.Route.extend({
model: function(params) {
this.store.query('stock', {filter:{id : params.stock_id}}).then(function(stock){return stock.get('firstObject')});
}
});
export default DS.Model.extend({
Symbol: DS.attr('string'),
Name: DS.attr('string'),
LastSale: DS.attr('string'),
MarketCap: DS.attr('string'),
IPOyear: DS.attr('string'),
Industry: DS.attr('string')
});
export default DS.RESTSerializer.extend({
primaryKey: '_id',
serializeId: function(id) {
return id.toString();
}
});
app/serializers/stock.js
export default Ember.Route.extend({
model: function(params) {
this.store.query('stock', {filter:{id : params.stock_id}}).then(function(stock){return stock.get('firstObject')});
}
});
export default DS.Model.extend({
Symbol: DS.attr('string'),
Name: DS.attr('string'),
LastSale: DS.attr('string'),
MarketCap: DS.attr('string'),
IPOyear: DS.attr('string'),
Industry: DS.attr('string')
});
export default DS.RESTSerializer.extend({
primaryKey: '_id',
serializeId: function(id) {
return id.toString();
}
});
app/templates/stock.hbs
{{#each model as |item|}}
<h3>{{item.Name}}</h3>
{{/each}}
模型钩子应该返回结果,只有这样才能通过setupController方法钩子在相应控制器的模型中设置该结果
model: function(params) {
return this.store.query('stock', {filter:{id : params.stock_id}}).then(function(stock){return stock.get('firstObject')});
}
更新:
您的模型字段名称应为camelCased
// app/models/stock.js
export default DS.Model.extend({
symbol: DS.attr('string'),
name: DS.attr('string'),
lastSale: DS.attr('string'),
marketCap: DS.attr('string'),
iPOyear: DS.attr('string'),
industry: DS.attr('string')
});
并确保您的后端正在接受筛选器并以以下格式返回所需结果
"stocks": [
{
"id": 1,
"symbol": "foo",
"name": "foo",
"lastSale": "foo",
"marketCap": "foo",
"iPOyear": "foo",
"industry": "foo"
}]
您需要从模型返回查询。更新你的app/routes/stock.js,使其看起来像
export default Ember.Route.extend({
model(params) {
return this.store
.query('stock', {
filter: {
id: params.stock_id
}
})
.then(stock => stock.get('firstObject'))
}
})
model hook应该返回结果谢谢你的回复,据我所知,我在上面的app/routes/stock.js路径中还没有这样做吗?你错过了model中的返回!谢谢你,那是个打字错误。我仍然无法从模型中检索数据。我只能在使用findAll时检索数据,但这会检索数据库中的所有元素,我只想使用url参数传递的id检索一个特定元素。只需确保查询返回正确的有效响应。我将结果打印到控制台,并获得一堆数据,这些数据不在我想要的附近。我注意到,只要输入url,即localhost/id,我就会自动调用node.js服务器,它会检索正确的信息。我似乎无法在模型钩子中抓住这一点。出于某种原因,我最终能够使用findRecord而不是查询从数据库中获取内部模型的数据。但是,我仍然无法在任何页面上显示这些信息。我不知道节点的内容。别忘了在模型钩子中返回结果,如果重写setupController钩子,那么别忘了调用this.\u super…arguments.FYI:.thenstock=>stock.get'firstObject'和.ThenSfunctionStock{return stock.get'firstObject'}都是相同的。但是,您使用ES6功能是很好的,但这并不是解决问题的主要原因。只是增加了回报。剩下的都收拾干净了。