如何在PortfolioItem / Feature对象上添加Release过滤器

时间:2013-08-01 22:55:56

标签: javascript rally appsdk2

使用AppSDK 2.0,如何在创建商店时看到PortfolioItem / Feature中的“Release”字段?

1 个答案:

答案 0 :(得分:0)

发布需要在WsapiDataStore中的获取字段之中:

fetch: ['FormattedID','Name','UserStories','Release']

但是在Rally.data.custom.Store中,为了考虑未分配给版本的功能,使用了以下条件:

Release: (release && release.Name) || 'None'

以下是代码:

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

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

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

        columnCfgs: [
        {
           text: 'Formatted ID', dataIndex: 'FormattedID', xtype: 'templatecolumn',
            tpl: Ext.create('Rally.ui.renderer.template.FormattedIDTemplate')
        },
        {
            text: 'Name', dataIndex: 'Name'
        },
        {
            text: 'Release', dataIndex: 'Release'
        },
        {
            text: 'Story Count', dataIndex: 'StoryCount'
        },
        {
            text: 'User Stories', dataIndex: 'UserStories', 
            renderer: function(value) {
            var html = [];
            Ext.Array.each(value, function(userstory){
                html.push('<a href="' + Rally.nav.Manager.getDetailUrl(userstory) + '">' + userstory.FormattedID + '</a>')
            });
            return html.join(', ');
            }
        }
        ]

    });
    },
    _onDataLoaded: function(store, data){
        var features = [];
        var pendingstories = data.length;
        //debugger;
        Ext.Array.each(data, function(feature) {
                var release = feature.get('Release');
                var f  = {
                FormattedID: feature.get('FormattedID'),
                Name: feature.get('Name'),
                Release: (release && release.Name) || 'None',                             
                _ref: feature.get("_ref"),
                StoryCount: feature.get('UserStories').Count,
                UserStories: []
                };

                var stories = feature.getCollection('UserStories');
               stories.load({
                fetch: ['FormattedID'],
                callback: function(records, operation, success){
                    Ext.Array.each(records, function(story){
                    var number = story.get('DirectChildrenCount');  
                    if (number == 0) {
                        f.UserStories.push({_ref: story.get('_ref'),
                            FormattedID: story.get('FormattedID')
                            });}
                    }, this);

                    --pendingstories;
                    if (pendingstories === 0) {
                    this._createGrid(features);
                    }
                },
                scope: this
                });
                features.push(f);
        }, this);
    }             
});