ExtJS4:深度的嵌套RESTfull资源URL> 1使用关联

时间:2013-11-15 17:55:22

标签: ruby-on-rails extjs extjs4

(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方法中构建网址所需的所有信息?我不想每次都手动添加一个过滤器 - 这种方法会破坏目的,我可能每次都会设置代理。

感谢您的帮助

1 个答案:

答案 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;
},

这样,所有过滤器属性:值对都可以通过buildUrlrequest.operation.filters方法中使用。

我现在接受这个答案(因为它有效),但如果建议更好的答案,我会接受另一个答案。