(Contrived)示例集合网址:
VERB /leagues
VERB /leagues/{leagueId}/teams
VERB /leagues/{leagueId}/teams/{teamId}/players
目标是配置我的关联和代理以自动定位这些网址。
目前,我为每个联盟,团队和播放器设置了一个模型,其中 hasMany
方向的协会链(联赛)--- hasMany - > (团队)--- hasMany - > (播放器)
使用拥有模型的Id作为关联模型中的外键。
(即每个Team
的{{1}}等于leagueId
所拥有的id
,而League
的{{1}}等于Player
{1}}它拥有TeamId
)
可以找到解决此问题的一次尝试here。但是,它对我不起作用。我最初的尝试是覆盖代理的id
方法:
Team
对于网址资源深度为1(buildUrl
),完全。问题在于我做了类似的事情:
buildUrl: function(request) {
var url = this.getUrl(request),
ownerId = request.operation.filters[0].value;
url = url.replace('{}', ownerId);
request.url = url;
return Ext.data.proxy.Rest.superclass.buildUrl
.apply(this, arguments);
},
我需要覆盖什么才能获得在VERB /leagues/{leagueId}/teams
方法中构建网址所需的所有信息?我不想每次都手动添加一个过滤器 - 这种方法会破坏目的,我可能每次都会设置代理。
感谢您的帮助
答案 0 :(得分:0)
我提出的当前(工作)解决方案是修改内部资源的constructor
并手动将过滤器添加到生成的商店。例如:
<强> App.models.Team 强>
constructor: function() {
this.callParent(arguments);
this.players().filters.add(new Ext.util.Filter({
property: 'leagueId',
value: this.raw.leagueId
}));
return this;
},
这样,所有过滤器属性:值对都可以通过buildUrl
在request.operation.filters
方法中使用。
我现在接受这个答案(因为它有效),但如果建议更好的答案,我会接受另一个答案。