2014-02-18 2 views
1

Я пытаюсь создать простое приложение ралли-карты, которое отображает проекты как столбцы с историями истории проектов как карты. Затем разрешите перетаскивание карт для установки проекта. Код прилагается.Rally SDK 2 вручную фильтровать или показывать отображаемые столбцы ралли карты

Если я указываю «Project» в качестве атрибута, плата содержит столбцы для всех проектов в рабочей области. Я хочу, чтобы ограничить столбцы, показанные либо

  1. контекстными родителей и детей, или
  2. Код списка столбцов проекта. Я попытался манипулировать столбцы, columnConfig, настройки контекста, но ничего не дает желаемых результатов.

    <!DOCTYPE html> 
    <html> 
    <head> 
        <title>CardBoard Example</title> 
    
        <script type="text/javascript" src="/apps/2.0rc2/sdk.js"></script> 
    
        <script type="text/javascript"> 
         Rally.onReady(function() { 
          Ext.define('ProjBoard', { 
           extend: 'Rally.app.App', 
    
           launch: function() { 
            if (cardBoardConfig) { 
             cardBoardConfig.destroy(); 
            } 
    
            var cardBoardConfig = { 
             xtype: 'rallycardboard', 
             types: ['User Story'], 
             attribute: 'Project', 
             fieldToDisplay: 'Project', 
             cardConfig: { 
              fields: ['Project', 'Parent','Iteration'] 
             }, 
             storeConfig: { 
              filters: [ 
               { property: 'ScheduleState', operator: '<', value: 'In-Progress' }, 
               { property: 'Iteration', operator: '=', value: '' } 
              ], 
              sorters: [ 
               { property: 'Rank', direction: 'DESC' } 
              ], 
              //Specify current project and scoping 
              context: this.getContext().getDataContext() 
             } 
            }; 
    
            this.add(cardBoardConfig); 
           } 
          }); 
          Rally.launchApp('ProjBoard', { 
           name: 'Backlog Project Board' 
          }); 
         }); 
        </script> 
        <style type="text/css"> 
        </style> 
    </head> 
    <body></body> 
    </html> 
    
+0

Что вы спрашиваете? Просто ограничивая столбцы одним из двух случаев? – emecas

+0

Да, если я запускаю это сейчас в своей тестовой среде, я получаю столбец для каждого проекта в своей иерархии. Я хочу ограничить столбцы, отображаемые одним из описанных методов. Первым подходом было бы вручную указать их (т. Е. «Продукт А, команда 1, команда 2, команда 3»). – user3314939

ответ

0

Вы должны быть в состоянии указать столбцы с помощью конфигурации:

https://help.rallydev.com/apps/2.0rc2/doc/#!/api/Rally.ui.cardboard.CardBoard-cfg-columns

columns: [ 
    { 
     value: '/project/12345', 
     columnHeaderConfig: { 
      headerTpl: '{project}', 
      headerData: {project: 'Project 1'} 
     } 
    }, 
    //more columns... 
] 
+0

Работал как шарм! У меня действительно были проблемы с распутыванием столбцов: синтаксис ... Спасибо! – user3314939

+0

Я согласен с тобой - я не пытался сделать доску таким образом довольно долго. Довольно сложно разобраться! –

0

Код ниже позволил мне сократить дюжину столбцов проекта до трех. Сначала я получаю текущий проект и запрашиваю коллекцию своих дочерних проектов для создания массива проектов, которые хочу иметь на доске (вы можете выбрать другие критерии для проектов, которые вы хотите на борту), а затем я продлил Rally.ui.cardboard.CardBoard, чтобы перезаписать его _buildColumnsFromModel метод, где только те столбцы, которые удовлетворяют этому условию, фильтруется:

retrievedColumns = _.select(retrievedColumns, function(project){  
    return that.arrayOfProjectRefs.indexOf(project.value) != -1 
}); 

Вот полный JS файл. Помимо этих изменений, это ваш код.

Ext.define('CustomApp', { extend: 'Rally.app.App', componentCls: 'app', 
     launch: function() { 
      var that = this; 
      that.arrayOfProjectRefs = []; 
      var p = this.getContext().getProject(); 
      Ext.create('Rally.data.wsapi.Store', { 
       model: 'Project', 
       fetch: ['Children'], 
       filters:[ 
        { 
         Property: '_ref', 
         value: p 
        } 
       ], 
       pageSize: 1, 
       autoLoad: true, 
       listeners: { 
        load: function(store, records) { 
         var project = records[0]; 
         var childProjects = project.get('Children'); 
         var childProjectsCount = project.get('Children').Count; 
         console.log('childProjectsCount', childProjectsCount); 
         that.arrayOfProjectRefs.push(project.get('_ref')); 
         project.getCollection('Children').load({ 
          fetch: ['_ref', 'Name', 'State'], 
          callback: function(records, operation, success) { 
           Ext.Array.each(records, function(child) { 
            console.log(child.get('_ref') + ' - ' + child.get('Name') + child.get('State')); 
            if (child.get('State') === 'Open') { 
             that.arrayOfProjectRefs.push(child.get('_ref')); 
             --childProjectsCount; 
             if (childProjectsCount === 0) { 
              that._buildBoard(); 
             } 
            } 
           }); 
          } 
         }); 
        } 
       } 
      }); 
     }, 

     _buildBoard:function(){ 
     var that = this; 
     console.log('app._arrayOfProjectRefs', this.arrayOfProjectRefs); 
     Ext.define('ProjectCardboard', {extend: 'Rally.ui.cardboard.CardBoard', 
      xtype: 'projectCardboard', 

     _buildColumnsFromModel: function() { 
       var model = this.models[0]; 
       if (model) { 
        var attribute = model.getField('Project'); 
        if (attribute) { 
         attribute.getAllowedValueStore().load({ 
          callback: function(records, operation, success) { 
           var retrievedColumns = _.map(records, function(allowedValue) { 
            var displayValue, value = allowedValue.get('StringValue'); 
            if (!value && attribute.attributeDefinition.AttributeType.toLowerCase() === 'rating') { 
             value = "None"; 
            } else if (attribute.attributeDefinition.AttributeType.toLowerCase() === 'object') { 
             displayValue = value; 
             value = allowedValue.get('_ref'); 
             if (value === 'null') { 
              value = null; 
             } 
            } 

            return { 
             value: value, 
             columnHeaderConfig: { 
              headerTpl: displayValue || value || 'None' 
             } 
            }; 
           }); 

           this.fireEvent('columnsretrieved', this, retrievedColumns); 

           retrievedColumns = _.select(retrievedColumns, function(project){  
            return that.arrayOfProjectRefs.indexOf(project.value) != -1 
           }); 
           console.log('retrievedColumns after filter', retrievedColumns) 
           this.columnDefinitions = []; 
           _.each(retrievedColumns, this.addColumn, this); 
           this.renderColumns(); 
          }, 
          scope: this 
         }); 
        } 
       } 
      }  
    }); 

      var addNewConfig = { 
       xtype: 'rallyaddnew', 
       recordTypes: ['User Story'], 
       ignoredRequiredFields: ['Name', 'Iteration'], 
       showAddWithDetails: false, 
      }; 

      this.addNew = this.add(addNewConfig); 
      var myCardConfig = { 
        xtype: 'rallycard', 
        fields: ['ScheduleState','Name'], 
        maxHeight: 100 
       } 

      var cardBoardConfig = { 
       xtype: 'projectCardboard', 
       types: ['User Story'], 
       attribute: 'Project', 
       cardConfig: myCardConfig 
      }; 

      this.cardBoard = this.add(cardBoardConfig); 
    } 
}); 
+0

Я положил это в Cloud9, используя ралли-приложение-строитель. Создано приложение, но панель не отображается. В консоли Chrome: childProjectsCount 0 независимо от области I. – user3314939

Смежные вопросы