1

将缺陷从看板上的故事中拉出来时遇到问题。我们定制板上的功能之一是列出与故事相关的缺陷,在卡片内部。

我有这个在 2.0p2 中工作,但是在将我的代码移植到 2.0rc1 时,我似乎无法取回缺陷数组。

我曾经这样称呼它:

var defectArray = this.card.getRecord().get("Defects");

然后在典型的 for 循环中遍历它们:

for (var i = 0; i < defectArray.length; i++) {
  var defect = defectArray[i];
  ...
}

旧的 API 用于在 .get("Defects) 上返回一个对象数组,而现在它没有。

我确定我错过了一些东西,任何帮助都会很棒!

4

2 回答 2

1

你可能会得到这样的缺陷:

var defects = story.getCollection('Defects');

这是使用 2.0rc1 并访问用户故事中的缺陷集合的完整代码。在代码中,我构建了一个网格,但访问集合的部分有望有所帮助。

Ext.define('CustomApp', {
extend: 'Rally.app.App',
componentCls: 'app',

launch: function() {
    Ext.create('Rally.data.WsapiDataStore', {
        model: 'UserStory',
        fetch: ['FormattedID','Name','Defects'],
        pageSize: 100,
        autoLoad: true,
        listeners: {
            load: this._onDataLoaded,
            scope: this
        }
    });
},

_createGrid: function(stories) {
     this.add({
        xtype: 'rallygrid',
        store: Ext.create('Rally.data.custom.Store', {
            data: stories,
            pageSize: 100
        }),

        columnCfgs: [
            {
               text: 'Formatted ID', dataIndex: 'FormattedID'
            },
            {
                text: 'Name', dataIndex: 'Name'
            },
            {
                text: 'Defect Count', dataIndex: 'DefectCount'
            },
            {
                text: 'Defects', dataIndex: 'Defects', flex: 1, emptyCellText: 'zero',
                renderer: function(value) {
                    if (value) {
                        return value.join(',');
                    }
                }
            }
        ]

    });
},
_onDataLoaded: function(store, data){
            var stories = [];
            var pendingDefects = data.length;

            Ext.Array.each(data, function(story) {
                        var s  = {
                            FormattedID: story.get('FormattedID'),
                            Name: story.get('Name'),
                            DefectCount: story.get('Defects').Count,
                            Defects: []
                        };

                        var defects = story.getCollection('Defects');
                        defects.load({
                            fetch: ['FormattedID'],
                            callback: function(records, operation, success){
                                Ext.Array.each(records, function(defect){
                                    s.Defects.push(defect.get('FormattedID'));    
                                }, this);

                                --pendingDefects;
                                if (pendingDefects === 0) {
                                    this._createGrid(stories);
                                }
                            },
                            scope: this
                        });
                        stories.push(s);
            }, this);
}             

});

于 2013-06-28T14:54:57.883 回答
1

默认情况下,2.0rc1 使用新的 WSAPI v2.0。出于性能原因,在 WSAPI 的 2.x 版本中不再可能执行此操作。现在每个对象集合都有自己独特的 ref uri。这意味着这些集合现在可以单独查询、分页、排序和过滤。

获取故事上的缺陷现在将返回一个对象,其中包含计数和从中检索集合数据的 uri。ref uri 通常采用/type/oid/collection 格式(例如/hierarchicalrequirement/12345/defects)。

所有记录现在都有一个用于检索子集合数据的getCollection方法。此方法将返回Rally.data.CollectionStore的一个实例,用于处理子集合。

以下示例显示了如何在 SDK 2.0rc1/WSAPI 2.x 中检索故事的相关缺陷信息:

var defectInfo = story.get('Defects');
var defectCount = defectInfo.Count;

story.getCollection('Defects').load({
    fetch: ['FormattedID', 'Name', 'State'],
    callback: function(records, operation, success) {
        Ext.Array.each(records, function(defect) {
            //each record is an instance of the defect model
            console.log(defect.get('FormattedID') + ' - ' +
                defect.get('Name') + ': ' + defect.get('State'));
        });
    }
});
于 2013-06-28T14:51:36.403 回答