Rally API 2检查模型的内容

时间:2014-01-28 02:54:02

标签: extjs rally appsdk2

我有一些代码将Release模型拉回来并在网格中显示,这工作正常,但我无法弄清楚如何检查返回模型中的内容。

我想要的是在某种对象中获取模型的内容,我可以根据需要重新组织或钻取(在本例中为发布模型)。

如果我添加一个组件并将模型转储到html中,它就不会像我期望的那样返回内容。

Rally.data.ModelFactory.getModel({
        type: 'Release',
        success: function(model) {
                this.add({
                    xtype: 'component',
                    html: model
                });

                this.grid = this.add({
                xtype: 'rallygrid',
                model: model,
                columnCfgs: [
                    'FormattedID',
                    'Name',
                    'RevisionHistory'                    ],
                storeConfig: {
                    filters: queryFilters
                }
            });
        },
        scope: this
    });                 

如果我深入研究ExtJS文档,似乎我应该可以在模型上执行类似getData()的操作来返回内容,但这不起作用。

调试器中的检​​查告诉我我有一个“Rally.domain.v2.0.project.10098485624.Release”对象,但我看不到如何简单地访问对象中的项目列表。显然有一种方法,因为将此模型传递给网格组件将非常愉快地显示它。 这个对象的调试器向我展示了一些要调用的其他函数,但我不知道哪一个或如何使用它

...
getArtifactMappings: function () {
getCollectionFields: function () {
getCustomFields: function () {
getField: function (fieldName) {
getFields: function () {
getFieldsByName: function (fieldNames) {
getName: function () {
getNonCollectionFields: function () {
getPermissionLevels: function (permission) {
getProxy: function () {
etc...

Rally文档表明我应该可以在模型https://help.rallydev.com/apps/2.0rc2/doc/#!/api/Rally.data.Model上调用getData(),但看起来ModelFactory.getModel()没有返回具有getData()方法的类型

1 个答案:

答案 0 :(得分:1)

模型是一个类,而记录是该类的实例。

getData()将用于记录。 有一些静态方法适用于实际模型,但getData()不是其中之一。

以下是以下代码中的片段:

 _onDataLoaded: function(store, data){
      _.each(data, function(record){
         var r = record.getData();
         console.log('release', r);

此代码构建按项目和ReleaseStartDate过滤的版本网格。我注意到在您的代码中,您希望通过实际修改dom来显示模型信息,可能用于调试目的。我更喜欢使用console.log,但在下面的例子中我做了两个。我使用了带页脚的边框布局,并在页脚中将容器的html属性设置为JSON.stringify(r)

  Ext.define('CustomApp', {
     extend: 'Rally.app.App',
     componentCls: 'app',
     layout:'border',
               defaults: {
                  collapsible: true,
                  split: true,
                  bodyStyle: 'padding:15px',
               },
                  items: [{
                      title: 'data',
                      region:'south',
                      itemId: 'd',
                      margins: '5 0 0 0',
                      cmargins: '5 5 0 0'

                  },{
                      title: 'Releases',
                      itemId: 'r',
                      collapsible: false,
                      region:'center',
                      margins: '5 0 0 0'
                  }] ,
      launch: function() {
        var context =  this.getContext();
        var projectId = context.getProject().ObjectID;
        var millisecondsInDay = 86400000;            
                    var currentDate = new Date();
                    var startDate = new Date(currentDate - millisecondsInDay*90); //in the last 90 days
                    var startDateUTC = startDate.toISOString();
         Ext.create('Rally.data.WsapiDataStore', {
            model: 'Release',
            fetch: ['Name','ReleaseStartDate','ReleaseDate', 'State'],
            filters: [
                        {
                        property: 'ReleaseStartDate',
                        operator: '>',
                        value: startDateUTC
                        },
                        {
                        property: 'Project',
                        operator: '=',
                        value: '/project/'+ projectId
                        }
                    ],
            autoLoad: true,
            listeners: {
                load: this._onDataLoaded,
                scope: this
            }
        });
    },


     _onDataLoaded: function(store, data){
     var text = '';
      _.each(data, function(record){
         var r = record.getData();
         console.log('release', r);
         text = text + JSON.stringify(r);
      });
      console.log('text', text);
         this.down('#d').add({
            xtype:'container',
            html: text
            });
         if (!this.down('#g')) {
            this.down('#r').add({
            xtype: 'rallygrid',
            store: store,
            itemId: 'g',
            columnCfgs: [
                {
                   text: 'Name', dataIndex: 'Name'
                },
                {
                   text: 'State', dataIndex: 'State'
                },
                {
                    text: 'Start Date', dataIndex: 'ReleaseStartDate', flex:1
                },
                {
                    text: 'Release Date', dataIndex: 'ReleaseDate',flex:1
                }
            ]

         }); 
         }
         else{
            (this.down('#g')).reconfigure(store);
         }

      }
 });

enter image description here