根据我到达页面的方式,向 API 发送不同的 url 请求
Getting different url requests to API depending on how I've gotten to the page
我遇到了一些我无法找出原因的奇怪行为。
这是我的路由器:
App.Router.map(function() {
this.resource('mapPieceSets', { path: '/map-pieces' }, function () {
this.resource('mapPieceSet', { path: '/:mapPieceSet_id' }, function () {
this.resource('mapPiece', { path: '/:mapPiece_id' });
});
});
});
我从主页 #/
重新加载应用程序,然后向下导航到 mapPiece
路由,我收到了这些请求的 URL:
[Domain]/api/mapPieceSets/
[Domain]/api/mapPieces/1/
[Domain]/api/mapPieces/2/
一切正常(mapPieceSets
returns mapPieceSet
的列表,其中有 mapPiece
的列表反对他们)
但是,如果我在 mapPiece
路由页面上重新加载 while,那么我会得到这个 URL:
[Domain]/api/mapPieceSets/
[Domain]/api/mapPieceSets/?mapPieceSet_id=1
[Domain]/api/mapPieces/?mapPiece_id=1
所以从 /:id=
切换到 ?id=
,这对我的终点不起作用(这是我需要解决的一个附带问题),但只是想知道为什么 URL 改变了它们的内容're request,以及当 mapPieceSets/
的响应中返回整个对象时,为什么我们收到对 mapPieceSets/?mapPieceSet_id=1
的请求
(如果您需要我的应用程序中的任何其他代码片段,请告诉我,我可以将它们放入)
这是一个相当普遍的混淆。当您在您的应用程序中四处导航时,您经常使用 link-to
,然后告诉 ember 在访问路线时使用指定的模型。当您刷新页面时,Ember 必须使用 url /apimapPieceSets/3/2
来预测模型。到那时,它将转到每条路线 MapPieceSetsRoute
、MapPieceSetRoute
和 MapPieceRoute
并击中传递任何关联参数的每个模型挂钩。所以你需要告诉 Ember 怎么做,就是如何正确加载 mapPieceSet
和 mapPiece
。您需要为这两者设置一个模型挂钩。
App.MapPieceSetsRoute = Em.Route.extend({
// I don't know if you're using Ember Data, but I'm going to assume you are
model: function(params){
return this.store.find('mapPieceSet', params.mapPieceSet_id);
}
});
从您所说的看来,该模型似乎已在 mapPieceSets
的客户端可用。在这种情况下,您可以使用 modelFor
方法获取父路由的模型并获取您的模型。
App.MapPieceSetsRoute = Em.Route.extend({
// I don't know if you're using Ember Data, but I'm going to assume you are
model: function(params){
return this.modelFor('mapPieceSets').get('properyWithMapPieces').findBy('id', params.mapPieceSet_id);
}
});
我遇到了一些我无法找出原因的奇怪行为。
这是我的路由器:
App.Router.map(function() {
this.resource('mapPieceSets', { path: '/map-pieces' }, function () {
this.resource('mapPieceSet', { path: '/:mapPieceSet_id' }, function () {
this.resource('mapPiece', { path: '/:mapPiece_id' });
});
});
});
我从主页 #/
重新加载应用程序,然后向下导航到 mapPiece
路由,我收到了这些请求的 URL:
[Domain]/api/mapPieceSets/
[Domain]/api/mapPieces/1/
[Domain]/api/mapPieces/2/
一切正常(mapPieceSets
returns mapPieceSet
的列表,其中有 mapPiece
的列表反对他们)
但是,如果我在 mapPiece
路由页面上重新加载 while,那么我会得到这个 URL:
[Domain]/api/mapPieceSets/
[Domain]/api/mapPieceSets/?mapPieceSet_id=1
[Domain]/api/mapPieces/?mapPiece_id=1
所以从 /:id=
切换到 ?id=
,这对我的终点不起作用(这是我需要解决的一个附带问题),但只是想知道为什么 URL 改变了它们的内容're request,以及当 mapPieceSets/
mapPieceSets/?mapPieceSet_id=1
的请求
(如果您需要我的应用程序中的任何其他代码片段,请告诉我,我可以将它们放入)
这是一个相当普遍的混淆。当您在您的应用程序中四处导航时,您经常使用 link-to
,然后告诉 ember 在访问路线时使用指定的模型。当您刷新页面时,Ember 必须使用 url /apimapPieceSets/3/2
来预测模型。到那时,它将转到每条路线 MapPieceSetsRoute
、MapPieceSetRoute
和 MapPieceRoute
并击中传递任何关联参数的每个模型挂钩。所以你需要告诉 Ember 怎么做,就是如何正确加载 mapPieceSet
和 mapPiece
。您需要为这两者设置一个模型挂钩。
App.MapPieceSetsRoute = Em.Route.extend({
// I don't know if you're using Ember Data, but I'm going to assume you are
model: function(params){
return this.store.find('mapPieceSet', params.mapPieceSet_id);
}
});
从您所说的看来,该模型似乎已在 mapPieceSets
的客户端可用。在这种情况下,您可以使用 modelFor
方法获取父路由的模型并获取您的模型。
App.MapPieceSetsRoute = Em.Route.extend({
// I don't know if you're using Ember Data, but I'm going to assume you are
model: function(params){
return this.modelFor('mapPieceSets').get('properyWithMapPieces').findBy('id', params.mapPieceSet_id);
}
});