Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于视图显示积压的自定义HTML页面_Javascript_Html_Rally - Fatal编程技术网

Javascript 基于视图显示积压的自定义HTML页面

Javascript 基于视图显示积压的自定义HTML页面,javascript,html,rally,Javascript,Html,Rally,我正试图创建一个页面,显示基于特定条件的积压,但当我保存或更改视图时,它不会自动更新,我需要刷新页面,有人能帮我吗?我是rally应用程序开发新手 代码如下: <!DOCTYPE html> <html> <head> <title>UserStory Defect List</title> <script type="text/javascript" src="https://rally1.rallydev.com/apps/

我正试图创建一个页面,显示基于特定条件的积压,但当我保存或更改视图时,它不会自动更新,我需要刷新页面,有人能帮我吗?我是rally应用程序开发新手 代码如下:

<!DOCTYPE html>
<html>
<head>
<title>UserStory Defect List</title>

<script type="text/javascript" src="https://rally1.rallydev.com/apps/2.1/sdk-debug.js"></script>
<script type="text/javascript">

Rally.onReady(function() {
  Ext.define('UserStory.Defect.CustomizableColumnsGridBoard', {
    extend: 'Rally.app.App',
    componentCls: 'app',
    launch: function() {

      Ext.create('Rally.data.wsapi.TreeStoreBuilder').build({
        models: ['defect', 'userstory'],
        autoLoad: true,
        enableHierarchy: true
      }).then({
        success: this._onStoreBuilt,
        scope: this,
        listeners: {
                            select: this._onSelect,
                            ready: this._onLoad,
                            scope: this
                        }
    });

  },
                  _onSelect: function() {
                    var grid = this.down('rallygridboardsharedviewcontrol'),
                        store = grid.getStore();

                    store.clearFilter(true);
                    store.filter(this._getStateFilter());
                },                
                _onLoad: function() {
                },


  _onStoreBuilt: function(store) {
    var modelNames = ['defect', 'userstory'],
    context = this.getContext();
    this.add({
      xtype: 'rallygridboard',
      context: context,
      modelNames: modelNames,
      toggleState: 'grid',
      stateful: false,
      plugins: [
        'rallygridboardaddnew',
        {
          ptype: 'rallygridboardinlinefiltercontrol',
          inlineFilterButtonConfig: {
            stateful: true,
            stateId: context.getScopedStateId('filters'),
            modelNames: modelNames,
            inlineFilterPanelConfig: {
              quickFilterPanelConfig: {
                defaultFields: [
                  'ArtifactSearch',
                   'Owner',
                    'ModelType',
                     'Tags'
                ],
                addQuickFilterConfig: {

                                    whiteListFields: ['Tags','Milestones']
                                }
              },
              advancedFilterPanelConfig:
              {
              advancedFilterRowsConfig: {
                                    propertyFieldConfig: {

                                        whiteListFields: ['Tags','Milestones']
                                    }
                                }
              }
            }
          }
        },
        {
          ptype: 'rallygridboardfieldpicker',
          headerPosition: 'left',
          modelNames: modelNames,
          stateful: true,
          stateId: context.getScopedStateId('columns-example')
        },
        {
            ptype: 'rallygridboardsharedviewcontrol',
            sharedViewConfig: {
                stateful: true,
                stateId: context.getScopedStateId('custom-list-shared-view'),
                enableUrlSharing: this.isFullPageApp !== false
            }
        },
        {
          ptype: 'rallygridboardactionsmenu',
          menuItems: [
            {
              text: 'Export...',
              handler: function() {
                window.location = Rally.ui.gridboard.Export.buildCsvExportUrl(
                  this.down('rallygridboard').getGridOrBoard()
                );
              },
              scope: this
            }
          ],
          buttonConfig: {
            iconCls: 'icon-export'
          }
        },
        'rallygridboardtoggleable'
      ],
      cardBoardConfig: {
        attribute: 'ScheduleState'
      },
      gridConfig: {
        store: store,
        columnCfgs: [
          'Name',
          'ScheduleState',
          'State',
          'Iteration',
          'Release'
        ]
      },
      height: this.getHeight()-20
    });
  }
});

Rally.launchApp('UserStory.Defect.CustomizableColumnsGridBoard', {
  name: 'UserStory Defect List'
});
});
rally.nLoad(function (){location.reload();});
</script>

<style type="text/css">

</style>
</head>
<body></body>
</html>

用户故事缺陷列表
onReady(函数(){
Ext.define('UserStory.Defect.CustomizelColumnsGridboard'{
扩展:“Rally.app.app”,
组件CLS:“应用程序”,
启动:函数(){
Ext.create('Rally.data.wsapi.TreeStoreBuilder').build({
模型:['defect','userstory'],
自动加载:对,
enableHierarchy:true
}).那么({
成功:这是一个成功的故事,
范围:本,,
听众:{
选择:此。\u选择,
准备好:这个。_onLoad,
范围:本
}
});
},
_onSelect:function(){
var grid=this.down('rallygridboardsharedviewcontrol'),
store=grid.getStore();
store.clearFilter(true);
store.filter(this.\u getStateFilter());
},                
_onLoad:function(){
},
_OnStoreBuild:功能(存储){
var modelNames=['defect','userstory'],
context=this.getContext();
这个。添加({
xtype:“rallygridboard”,
上下文:上下文,
模型名:模型名,
toggleState:“网格”,
有状态:错误,
插件:[
“rallygridboardaddnew”,
{
p类型:“rallygridboardinlinefiltercontrol”,
inlineFilterButtonConfig:{
有状态的:是的,
stateId:context.getScopedStateId('filters'),
模型名:模型名,
inlineFilterPanelConfig:{
quickFilterPanelConfig:{
默认字段:[
“工件搜索”,
“所有者”,
“模型类型”,
“标签”
],
addQuickFilterConfig:{
whiteListFields:['Tags','Milestones']
}
},
高级过滤器面板配置:
{
advancedFilterRowsConfig:{
propertyFieldConfig:{
whiteListFields:['Tags','Milestones']
}
}
}
}
}
},
{
p类型:“rallygridboardfieldpicker”,
标题位置:“左”,
模型名:模型名,
有状态的:是的,
stateId:context.getScopedStateId('columns-example')
},
{
p类型:“rallygridboardsharedviewcontrol”,
sharedViewConfig:{
有状态的:是的,
stateId:context.getScopedStateId('custom-list-shared-view'),
EnableUrlShareing:this.isFullPageApp!==false
}
},
{
p类型:“rallygridboardactionsmenu”,
菜单项:[
{
文本:“导出…”,
处理程序:函数(){
window.location=Rally.ui.gridboard.Export.buildCsvExportUrl(
this.down('rallygridboard').getGridOrBoard()
);
},
范围:本
}
],
按钮图标:{
iconCls:“图标导出”
}
},
“RallyGridboardTogleable”
],
cardBoardConfig:{
属性:“ScheduleState”
},
gridConfig:{
店:店,,
专栏CFGS:[
“姓名”,
“计划状态”,
“国家”,
“迭代”,
“释放”
]
},
高度:this.getHeight()-20
});
}
});
Rally.launchApp('UserStory.Defect.CustomizelColumnsGridboard'{
名称:“UserStory缺陷列表”
});
});
nLoad(函数(){location.reload();});

我将代码更改为此,但视图不会保存过滤

    <!DOCTYPE html>
<html>
<head>
<title>UserStory Defect List</title>

<script type="text/javascript" src="https://rally1.rallydev.com/apps/2.1/sdk-debug.js"></script>
<script type="text/javascript">

Rally.onReady(function () {
    var Ext = window.Ext4 || window.Ext;

    Ext.define('Rally.apps.backlog', {
        extend: 'Rally.app.GridBoardApp',
        alias: 'widget.backlogapp',
        columnNames: ['FormattedID', 'Name', 'PlanEstimate', 'Priority', 'Owner'],
        requires: [
            'Rally.data.Ranker',
            'Rally.data.wsapi.Filter',
            'Rally.ui.gridboard.plugin.GridBoardInlineFilterControl',
            'Rally.ui.gridboard.plugin.GridBoardSharedViewControl'
        ],
        modelNames: ['hierarchicalrequirement', 'defect', 'defectsuite'],
        statePrefix: 'backlog',

        getAddNewConfig: function () {
            var config = {};
            if (this.getContext().isFeatureEnabled('S107862_TEAM_PLANNING_EXPANDED_BACKLOG_HOTNESS_PHASE_1')) {
                config.margin = 0;
            }

            return _.merge(this.callParent(arguments), config);
        },

        getPermanentFilters: function (types) {
            types = (types === undefined ? ['hierarchicalrequirement', 'defect', 'defectSuite'] : types);

            var typeCriteria = [];
            if (_.contains(types, 'defect')) {
                typeCriteria.push(Rally.data.wsapi.Filter.and([
                    { property: 'State', operator: '!=', value: 'Closed' },
                    { property: 'TypeDefOid', operator: '=', value: this._getModelFor('defect').typeDefOid }
                ]));
            }
            if (_.contains(types, 'hierarchicalrequirement')) {
                typeCriteria.push(Rally.data.wsapi.Filter.and([
                    { property: 'DirectChildrenCount', operator: '=', value: 0 },
                    { property: 'TypeDefOid', operator: '=', value: this._getModelFor('hierarchicalrequirement').typeDefOid }
                ]));
            }

            var defectSuiteModel = this._getModelFor('defectsuite');
            return [
                Rally.data.wsapi.Filter.and([
                    { property: 'Release', operator: '=', value: null },
                    { property: 'Iteration', operator: '=', value: null }
                ]),
                Rally.data.wsapi.Filter.or(typeCriteria.concat(defectSuiteModel ? [{ property: 'TypeDefOid', operator: '=', value: defectSuiteModel.typeDefOid }] : []))
            ];
        },

        getGridConfig: function () {
            return _.merge(this.callParent(arguments), {
                inlineAddConfig: {
                    listeners: {
                        beforeeditorshow: function (addNewCmp, params) {
                            params.Iteration = 'u'; // explicitly set iteration to unscheduled so it doesn't default to current iteration on TPS editor.
                        }
                    }
                }
            });
        },

        getGridStoreConfig: function () {
            return {
                enableHierarchy: false
            };
        },

        getGridBoardCustomFilterControlConfig: function () {
            var context = this.getContext();
            var blackListFields = ['Iteration', 'PortfolioItem', 'Release'];
            var whiteListFields = ['Milestones', 'Tags'];

            if (context.isFeatureEnabled('S107862_TEAM_PLANNING_EXPANDED_BACKLOG_HOTNESS_PHASE_1')) {
                return {
                    ptype: 'rallygridboardinlinefiltercontrol',
                    inlineFilterButtonConfig: {
                        stateful: true,
                        stateId: context.getScopedStateId('backlog-inline-filter'),
                        filterChildren: true,
                        modelNames: this.modelNames,
                        inlineFilterPanelConfig: {
                            quickFilterPanelConfig: {
                                defaultFields: [
                                    'ArtifactSearch',
                                    'Owner',
                                    'ModelType'
                                ],
                                addQuickFilterConfig: {
                                    blackListFields: blackListFields,
                                    whiteListFields: whiteListFields
                                }
                            },
                            advancedFilterPanelConfig: {
                                advancedFilterRowsConfig: {
                                    propertyFieldConfig: {
                                        blackListFields: blackListFields,
                                        whiteListFields: whiteListFields
                                    }
                                }
                            }
                        }
                    }
                };
            }

            return {
                showOwnerFilter: false,
                showIdFilter: true,
                idFilterConfig: {
                    stateful: true,
                    stateId: this.getScopedStateId('backlog-id-filter'),
                    storeConfig: {
                        autoLoad: true,
                        pageSize: 25,
                        fetch: ['FormattedID', '_refObjectName'],
                        filters: this.getPermanentFilters()
                    }
                }
            };
        },

        getSharedViewConfig: function() {
            var context = this.getContext();

            if (true) {
                return {
                    ptype: 'rallygridboardsharedviewcontrol',
                    sharedViewConfig: {
                        stateful: true,
                        stateId: context.getScopedStateId('backlog-shared-view'),
                        defaultViews: _.map(this._getDefaultViews(), function(view) {
                            Ext.apply(view, {
                                Value: Ext.JSON.encode(view.Value, true)
                            });
                            return view;
                        }, this),
                        enableUrlSharing: this.isFullPageApp !== false
                    },
                    enableGridEditing: context.isFeatureEnabled('S91174_ISP_SHARED_VIEWS_MAKE_PREFERENCE_NAMES_UPDATABLE')
                };
            }

            return {};
        },

        _getDefaultViews: function() {
            var rankColumnDataIndex = this.getContext().getWorkspace().WorkspaceConfiguration.DragDropRankingEnabled ? Rally.data.Ranker.RANK_FIELDS.DND : Rally.data.Ranker.RANK_FIELDS.MANUAL;

            return [
                {
                    Name: 'Default View',
                    identifier: 1,
                    Value: {
                        toggleState: 'grid',
                        columns: _.flatten([
                            { dataIndex: rankColumnDataIndex },
                            _.map(this.columnNames, function(columnName) {
                                return { dataIndex: columnName }
                            })
                        ]),
                        sorters:[{ property: rankColumnDataIndex, direction: 'ASC' }]
                    }
                }
            ];
        },

        getGridBoardConfig: function () {
            var config = this.callParent(arguments);
            return _.merge(config, {
                listeners: {
                    viewchange: function() {
                        this.loadGridBoard();
                    },
                    scope: this
                }
            });
        },

        _getModelFor: function(type) {
            return _.find(this.models, { typePath: type });
        },

        onFilterTypesChange: function(types) {
            this.gridboard.gridConfig.storeConfig.filters = this.getPermanentFilters(types);
        }
    });
    Rally.launchApp('Rally.apps.backlog', {
  name: 'UserStory Defect List'
});
});
</script>

<style type="text/css">

</style>
</head>
<body></body>
</html>

用户故事缺陷列表
Rally.onReady(函数(){
var Ext=window.Ext4 | | window.Ext;
Ext.define('Rally.apps.backlog'{
扩展:“Rally.app.GridBoardApp”,
别名:“widget.backlogapp”,
列名称:['FormattedID','Name','PlanEstimate','Priority','Owner'],
要求:[
“Rally.data.Ranker”,
'Rally.data.wsapi.Filter',
'Rally.ui.gridboard.plugin.GridBoardInlineFilterControl',
'Rally.ui.gridboard.plugin.GridBoardSharedViewControl'
],
模型名:['HierarchycalRequirement','defect','defectsuite'],
statePrefix:'积压',
getAddNewConfig:函数(){
var config={};
如果(this.getContext().isFeatureEnabled('S107862\团队\规划\扩展\待办事项\热度\阶段\ 1')){
config.margin=0;
}
return u.merge(this.callParent(arguments),config);
},
getPermanentFilters:函数(类型){
类型=(类型===未定义?['hierarchicalrequirement','defect','defectSuite']:类型);
var-typeCriteria=[];
if(u.contains(类型,'defect')){
typeCriteria.push(Rally.data.wsapi.Filter.and([
{属性:'State',运算符:'!=',值:'Closed'},
{属性:'TypeDefOid',运算符:'=',值:this.\u getModelFor('defect')。TypeDefOid}
]));
}
if(u.contains(类型,'hierarchycalrequirement')){
typeCriteria.push(Rally.data.wsapi.Filter.and([
{属性:'DirectChildrenCount',运算符:'=',值:0},
{属性:'TypeDefOid',运算符:'=',值:this.\u getModelFor('Hierarchy