所以我创建了一个自定义的html应用程序,这里列出了源代码。
<!DOCTYPE html>
<html>
<head>
<title>StoryMap</title>
<script type="text/javascript" src="/apps/2.0/sdk-debug.js"></script>
<script type="text/javascript">
Rally.onReady(function () {
Ext.define('mycardcolumnheader', {
extend: Rally.ui.cardboard.ColumnHeader,
alias: 'widget.mycardcolumnheader',
});
Ext.define('CustomApp', {
extend: 'Rally.app.App',
componentCls: 'app',
launch: function() {
//Fetch tree of items
// a) starting from item type in picker
// b) subject to a filter
//The number of columns is related to the number of lowest level PI type items that are found
//The header must show the top level (from the picker) and all the children
//The user stories are shown in a vertical line below
//Might want to introduce the concept of timebox in the vertical direction (for user stories)
//The cards for the PIs should show the progress bars
var ch = Ext.create( 'Ext.Container', {
});
var dTab = Ext.create('Ext.Container', {
items: [{
xtype: 'rallycardboard',
types: ['HierarchicalRequirement'],
// columnConfig: { xtype: 'mycardcolumn', displayField: 'feat', valueField: 'fest' },
// attribute: 'ScheduleState'
attribute: 'Feature',
rowConfig: { field: 'Release', sortDirection: 'ASC' },
enableDragAndDrop: true
}]
});
this.add(dTab);
}
});
Rally.launchApp('CustomApp', {
name:"StoryMap",
parentRepos:""
});
});
</script>
<style type="text/css">
.app {
/* Add app styles here */
}
</style>
</head>
<body>
</body>
</html>
它与我想要的非常相似,但仍然有一个小bug,我不知道如何解决它。错误是如果我选择父项目,董事会将在多个泳道中显示相同的版本。这是一个例子。
这可能是因为每个Rally项目都有自己的版本,并且应用程序不够智能,无法识别它们在逻辑上都是相同的版本。
如果在父项目级别创建版本1并将版本级联到子项目,则Rally实际上为每个项目创建3个版本... 1。我们的应用程序碰巧知道如果版本名称,开始日期和结束日期匹配,则应将它们视为单个版本。看来应用程序中没有包含此逻辑。
但是如何解决呢?谁有人可以看看?
答案 0 :(得分:0)
这是一种预期的行为,主要是因为我们从来没有把董事会的能力建立在&#34;桶&#34;类似的东西会释放到它的行或列中。
您可能需要覆盖Rally.ui.cardboard.row.Row上的isMatchingRecord方法以便能够存储行:
//add this at the top of your app
Ext.define('Rally.ui.cardboard.row.RowFix', {
override: 'Rally.ui.cardboard.row.Row',
isMatchingRecord: function(record) {
return this.callParent(arguments) ||
this.getValue().Name === (record.get('Release') && record.get('Release').Name);
}
});