2

我需要拉出属于用户故事的变更集以及构建变更集。

// load the data
_loadData : function(loadUi) {
console.log('load data started');
Ext.create('Rally.data.wsapi.Store', {
    model : ['User Story','Build']
    autoLoad : true,
    listeners : {
        load : function(myStore, data, success) {
            return this._processChangesetData(myStore, data, loadUi);
        },
    scope : this
    },
    fetch : [ 'FormattedID', 'Name', 'ScheduleState','Changesets', 'Iteration', 'Release' ,'Number', 'Status','Uri',]
});
},
4

1 回答 1

1

这有点复杂。Stories 有一个 Changesets 集合,其中的每个 Changeset 条目都有一个 Builds 集合。

所以,在伪代码中:

1) 加载故事,确保获取变更集
2) 对于在步骤 1 中加载的每个故事,加载变更集集合,确保获取构建
3) 对于在步骤 2 中加载的每个变更集,加载构建集合

关于如何使用集合的文档中有一个很好的指南:https ://help.rallydev.com/apps/2.1/doc/#!/guide/collections_in_v2-section-collection-fetching

请注意,由于循环中发生的嵌套负载量很大,这可能会非常慢。有没有办法可以过滤数据以避免加载所有内容?你想用所有这些数据回答什么问题?

代码示例:

Ext.create('Rally.data.wsapi.Store', {
    model: 'UserStory',
    fetch: ['Changesets'],
    autoLoad: true,
    listeners: {
        load: function(store, records) {
            records.each(function(story) {
                story.changeSets = story.getCollection('Changesets');
                story.changeSets.load({
                    fetch: ['Builds'],
                    callback: function(changesets) {
                        changesets.each(function(changeset) {
                            changeset.builds = changeset.getCollection('Builds');
                            changeset.builds.load({
                                fetch: ['Number', 'Duration', 'Status', 'Uri'],
                                callback: function(builds) {
                                    builds.each(function(build) {
                                        console.log(build);
                                    });
                                }
                            });
                        });
                    }
                });    
            });
        }
    }
});  

如上所述,我不建议在生产中运行此代码。它会很慢。如果您可以将顶层限制为特定故事,那可能不会太糟糕。

于 2017-07-21T21:15:57.850 回答