1

WsapiDataStoreを作成すると、store.data.itemsとstore.data.keysは空の配列を返しますが、console.log(store.data)を実行するとキーとアイテムを確認できます。

store = Ext.create('Rally.data.WsapiDataStore', {
    model: 'Defect',
    context: {
        project: '/project/xxxxxx'
    },
    autoLoad: true,
    fetch: ['Rank', 'FormattedID', 'Name']
});

console.log(store.data)の出力:

constructor {items: Array[0], map: Object, keys: Array[0], length: 0, allowFunctions:   false…}
    allowFunctions: false
    events: Object
    generation: 8
    getKey: function (record) {
    hasListeners: HasListeners
    items: Array[7]
    keys: Array[7]
    length: 7
    map: Object
    sorters: constructor
    __proto__: TemplateClass

最初の行に「items:Array [0]」と「keys:Array [0]」と表示されていますが、展開すると「items:Array[7]」と「keys:Array[7]」と表示されていることに注意してください。さらに展開すると、7つのレコードも表示されます。

ロードリスナーを追加し、リスナー関数からデータにアクセスすると、すべてが期待どおりに機能します(ただし、それはしたくありません)

4

1 に答える 1

0

最善の方法は、2つのRally.data.WsapiDataStoreを介してデータを処理することだと思います。非同期ロードを適切に処理するには、2つのストアのリスナーをチェーンする必要があります。プロセスを説明する例を次に示します。

<!DOCTYPE html>
<html>
<head>
    <title>MultipleModelExample</title>

    <script type="text/javascript" src="https://rally1.rallydev.com/apps/2.0p5/sdk.js"></script>

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

                // Combined Story/Defect Records
                dataRecords: null,

                launch: function() {
                    //Write app code here

                    this.dataRecords = [];

                    Rally.data.ModelFactory.getModels({
                        types: ['HierarchicalRequirement','Defect'],
                        scope: this,
                        success: function(models) {
                            this.myModels = models;

                            this.storyStore = Ext.create('Rally.data.WsapiDataStore', {
                                model: models.HierarchicalRequirement,
                                fetch: true,
                                autoLoad: true,
                                remoteSort: true,
                                sorters: [
                                    { property: 'FormattedID', direction: 'Asc' }
                                ],
                                listeners: {
                                    load: this._processStories,
                                    scope: this
                                }
                            });
                        }
                    });
                },

                _processStories: function(store, records, successful, opts) {

                    var storyRecords = [];

                    Ext.Array.each(records, function(record) {
                        //Perform custom actions with the data here
                        //Calculations, etc.
                        storyRecords.push({
                            FormattedID: record.get('FormattedID'),
                            Name: record.get('Name'),
                            Description: record.get('Description')
                        });
                    });

                    this.dataRecords = storyRecords;

                    this.defectStore = Ext.create('Rally.data.WsapiDataStore', {
                        model: this.myModels.Defect,
                        fetch: true,
                        autoLoad: true,
                        remoteSort: true,
                        sorters: [
                            { property: 'FormattedID', direction: 'Asc' }
                        ],
                        listeners: {
                            load: this._processDefects,
                            scope: this
                        }
                    });
                },

                _processDefects: function(store, records, successful, opts) {

                    var defectRecords = [];

                    Ext.Array.each(records, function(record) {
                        //Perform custom actions with the data here
                        //Calculations, etc.
                        defectRecords.push({
                            FormattedID: record.get('FormattedID'),
                            Name: record.get('Name'),
                            Description: record.get('Description')
                        });
                    });

                    var combinedRecords = defectRecords.concat(this.dataRecords);

                    this.add({
                        xtype: 'rallygrid',
                        store: Ext.create('Rally.data.custom.Store', {
                            data: combinedRecords,
                            pageSize: 25
                        }),
                        columnCfgs: [
                            {
                                text: 'FormattedID', dataIndex: 'FormattedID'
                            },
                            {
                                text: 'Name', dataIndex: 'Name', flex: 1
                            },
                            {
                                text: 'Description', dataIndex: 'Description', flex: 1
                            }
                        ]
                    });
                }

            });

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

    <style type="text/css">
        .app {
             /* Add app styles here */
        }
    </style>
</head>
<body></body>
</html>
于 2013-01-31T23:09:34.813 に答える