1

ユーザー ストーリーの親機能を表示し、同じ親フィールドで並べ替えるのに問題があります。これが私のコードです。親が別のユーザー ストーリーでない限り、親列に空の値が表示されます。また、親フィールドで並べ替えることができません。

あなたの助けは大歓迎です!

ありがとう!

<script type="text/javascript">
        Rally.onReady(function() {
            Ext.define('CustomApp', {
                extend: 'Rally.app.App',
                componentCls: 'app',

                items: [
                    {
                        xtype: 'container',
                        itemId: 'iterationFilter'
                    },
                    {
                        xtype: 'container',
                        itemId: 'grid',
                        width: 800
                    }
                ],

                launch: function() {
                    this.down('#iterationFilter').add({
                        xtype: 'rallyiterationcombobox',
                        cls: 'filter',
                        model: 'UserStory',
                        field: 'Iteration',
                        listeners: {
                            ready: this._onIterationComboBoxLoad,
                            select: this._onIterationComboBoxSelect,
                            scope: this
                        }
                    });
                },

                _onIterationComboBoxLoad: function(comboBox) {
                    this.iterationComboBox = comboBox;

                    Rally.data.ModelFactory.getModel({
                        type: 'UserStory',
                        success: this._onModelRetrieved,
                        scope: this
                    });
                },                  

                _getFilter: function() {
                    var filter = [];

                    filter.push({
                        property: 'Iteration',
                        operator: '=',
                        value: this.iterationComboBox.getValue()
                    });

                    return filter;
                },


                _onIterationComboBoxSelect: function() {
                    this._onSettingsChange();
                },

                _onSettingsChange: function() {
                    this.grid.filter(this._getFilter(), true, true);
                },

                _onModelRetrieved: function(model) {
                    this.grid = this.down('#grid').add({
                        xtype: 'rallygrid',
                        model: model,
                        columnCfgs: [
                            'FormattedID',
                            'Name',
                            'Plan Estimate',
                            'Parent',
                            'Schedule State',
                            'StoryType'
                        ],
                        storeConfig: {
                            context: this.context.getDataContext(),
                            filters: this._getFilter()
                        },
                        showPagingToolbar: true,
                        enableEditing: false
                    });
                }



            });
        });


      Rally.launchApp('CustomApp', {
          name: 'Defect Dashboard'
      });
</script>
4

3 に答える 3

1

ユーザー ストーリーには、その親に対して 2 つの異なるフィールドがあります。親が別のストーリーの場合、親を使用します。親がフィーチャーのようなポートフォリオ アイテムである場合、親は PortfolioItem と呼ばれます。

ユーザー ストーリーのフィールドについては、Web サービスドキュメントを参照してください。

あなたの例では、列の構成を変更して PorfolioItem を含める必要があります

columnCfgs: [
                            'FormattedID',
                            'Name',
                            'Plan Estimate',
                            'PortfolioItem',
                            'Schedule State',
                            'StoryType'
                        ],
于 2013-01-07T19:32:45.007 に答える
0

レンダラーで修正したソリューションを見ると、設定したカスタム列に doSort メソッドを追加するだけです。ストアで remoteSort を false に設定していることを確認してから、メソッドで並べ替えをオーバーライドできます。

        doSort: function(state) {
            var ds = this.up('grid').getStore();
            var field = this.getSortParam();
            ds.sort({
                property: field,
                direction: state,
                sorterFn: function(v1, v2){
                    v1 = v1.get(field);
                    v2 = v2.get(field);
                    return v1.length > v2.length ? 1 : (v1.length < v2.length ? -1 : 0);
                }
            });
        }

このソーターはたまたまフィールドの長さでソートされますが、必要に応じて変更できます。Ext js の内容によるカスタム列の並べ替えを参照してください

于 2013-08-01T18:32:09.933 に答える
0

少なくとも、各ユーザー ストーリーの機能の名前を示すことができました。ただし、ソート可能にするためにまだ問題があります。:(

    <!DOCTYPE html>
    <html>
    <head>
        <title>Grid Example</title>

        <script type="text/javascript" src="/apps/2.0p4/sdk.js?wsapiVersion=1.38"></script>
        <script type="text/javascript">
                Rally.onReady(function() {
                    Ext.define('CustomApp', {
                        extend: 'Rally.app.App',
                        componentCls: 'app',

                        items: [
                            {
                                xtype: 'container',
                                itemId: 'iterationFilter'
                            },
                            {
                                xtype: 'container',
                                itemId: 'grid'
                                //width: 800
                            }
                        ],

                        launch: function() {
                            this.down('#iterationFilter').add({
                                xtype: 'rallyiterationcombobox',
                                cls: 'filter',
                                model: 'UserStory',
                                field: 'Iteration',
                                listeners: {
                                    ready: this._onIterationComboBoxLoad,
                                    select: this._onIterationComboBoxSelect,
                                    scope: this
                                }
                            });
                        },

                        _onIterationComboBoxLoad: function(comboBox) {
                            this.iterationComboBox = comboBox;

                            Rally.data.ModelFactory.getModel({
                                type: 'UserStory',
                                success: this._onModelRetrieved,
                                scope: this
                            });
                        },                  

                        _getFilter: function() {
                            var filter = [];

                            filter.push({
                                property: 'Iteration',
                                operator: '=',
                                value: this.iterationComboBox.getValue()
                            });

                            return filter;
                        },


                        _onIterationComboBoxSelect: function() {
                            this._onSettingsChange();
                        },

                        _onSettingsChange: function() {
                            this.grid.filter(this._getFilter(), true, true);
                        },

                        _onModelRetrieved: function(model) {
                            this.grid = this.down('#grid').add({
                                xtype: 'rallygrid',
                                model: model,
                                columnCfgs: [
                                    'FormattedID',
                                    'Name',
                                    'PlanEstimate',
                                    {
                                        text: 'Feature',
                                        dataIndex: 'PortfolioItem',
                                        renderer: function(value, metaData, record, rowIndex, colIndex, store, view) {
                                            if (value != null) {
                                                return value.Name;
                                            }
                                            return '';
                                        }
                                    },
                                    'ScheduleState',
                                    'StoryType'
                                ],
                                storeConfig: {
                                    context: this.context.getDataContext(),
                                    remoteSort: false,
                                    filters: this._getFilter()
                                },
                                showPagingToolbar: true,
                                enableEditing: false
                            });
                        }



                    });
                });


              Rally.launchApp('CustomApp', {
                  name: 'Defect Dashboard'
              });
        </script>

        <style type="text/css">
            .filter {
                float: left;
                margin: 5px 5px;
                vertical-align: middle;
            }
        </style>
    </head>
    <body></body>
    </html>
于 2013-01-15T01:56:27.950 に答える