根据我进入页面的方式获取不同的URL请求

时间:2015-01-03 09:09:48

标签: ember.js

我得到一些奇怪的行为,我无法弄清楚原因。

这是我的路由器:

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路线,我要求这些网址:

  • [Domain]/api/mapPieceSets/
  • [Domain]/api/mapPieces/1/
  • [Domain]/api/mapPieces/2/

一切正常(mapPieceSets会返回mapPieceSet的列表,其列表中包含mapPiece

但是,如果我在mapPiece路由页面上重新加载while,那么我会收到以下网址:

  • [Domain]/api/mapPieceSets/
  • [Domain]/api/mapPieceSets/?mapPieceSet_id=1
  • [Domain]/api/mapPieces/?mapPiece_id=1

所以从/:id=切换到?id=,这不是我的终点(这是我需要解决的问题),但只是想知道为什么这些网址更改了他们要求的内容,以及为什么我们在mapPieceSets/?mapPieceSet_id=1

的回复中返回整个对象时向mapPieceSets/收到请求

(如果您需要我的应用程序中的任何其他代码片段,请告诉我,我可以将它们放入其中)

1 个答案:

答案 0 :(得分:0)

这是一个相当普遍的混乱。当你在你的应用程序中导航时,你经常使用link-to,然后告诉ember在访问路线时使用指定的模型。当您刷新页面时,Ember必须使用网址/apimapPieceSets/3/2对模型进行神圣处理。此时,它将转到每个路由MapPieceSetsRouteMapPieceSetRouteMapPieceRoute并点击每个模型挂钩传递任何相关的参数。那么你需要告诉Ember如何做,是如何正确加载mapPieceSetmapPiece。你需要为这两者设置一个模型钩子。

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);
  }
});