Javascript 如何在PortfolioItem/Feature对象上添加发布筛选器
使用AppSDK 2.0,在创建存储时如何查看PortfolioItem/Feature中的“Release”字段 发布需要位于WsapiDataStore中获取的字段中:Javascript 如何在PortfolioItem/Feature对象上添加发布筛选器,javascript,rally,appsdk2,Javascript,Rally,Appsdk2,使用AppSDK 2.0,在创建存储时如何查看PortfolioItem/Feature中的“Release”字段 发布需要位于WsapiDataStore中获取的字段中: fetch: ['FormattedID','Name','UserStories','Release'] 但在Rally.data.custom.Store中,为了说明未分配给发行版的功能,使用以下条件: Release: (release && release.Name) || 'None' 代码如下
fetch: ['FormattedID','Name','UserStories','Release']
但在Rally.data.custom.Store中,为了说明未分配给发行版的功能,使用以下条件:
Release: (release && release.Name) || 'None'
代码如下:
Ext.define('CustomApp', {
extend: 'Rally.app.App',
componentCls: 'app',
launch: function() {
Ext.create('Rally.data.WsapiDataStore', {
model: 'PortfolioItem/Feature',
fetch: ['FormattedID','Name','UserStories','Release'],
pageSize: 100,
autoLoad: true,
listeners: {
load: this._onDataLoaded,
scope: this
}
});
},
_createGrid: function(features) {
this.add({
xtype: 'rallygrid',
store: Ext.create('Rally.data.custom.Store', {
data: features,
pageSize: 100
}),
columnCfgs: [
{
text: 'Formatted ID', dataIndex: 'FormattedID', xtype: 'templatecolumn',
tpl: Ext.create('Rally.ui.renderer.template.FormattedIDTemplate')
},
{
text: 'Name', dataIndex: 'Name'
},
{
text: 'Release', dataIndex: 'Release'
},
{
text: 'Story Count', dataIndex: 'StoryCount'
},
{
text: 'User Stories', dataIndex: 'UserStories',
renderer: function(value) {
var html = [];
Ext.Array.each(value, function(userstory){
html.push('<a href="' + Rally.nav.Manager.getDetailUrl(userstory) + '">' + userstory.FormattedID + '</a>')
});
return html.join(', ');
}
}
]
});
},
_onDataLoaded: function(store, data){
var features = [];
var pendingstories = data.length;
//debugger;
Ext.Array.each(data, function(feature) {
var release = feature.get('Release');
var f = {
FormattedID: feature.get('FormattedID'),
Name: feature.get('Name'),
Release: (release && release.Name) || 'None',
_ref: feature.get("_ref"),
StoryCount: feature.get('UserStories').Count,
UserStories: []
};
var stories = feature.getCollection('UserStories');
stories.load({
fetch: ['FormattedID'],
callback: function(records, operation, success){
Ext.Array.each(records, function(story){
var number = story.get('DirectChildrenCount');
if (number == 0) {
f.UserStories.push({_ref: story.get('_ref'),
FormattedID: story.get('FormattedID')
});}
}, this);
--pendingstories;
if (pendingstories === 0) {
this._createGrid(features);
}
},
scope: this
});
features.push(f);
}, this);
}
});
Ext.define('CustomApp'{
扩展:“Rally.app.app”,
组件CLS:“应用程序”,
启动:函数(){
Ext.create('Rally.data.WsapiDataStore'{
型号:“PortfolioItem/Feature”,
获取:['FormattedID','Name','UserStories','Release'],
页面大小:100,
自动加载:对,
听众:{
加载:这个。加载后,
范围:本
}
});
},
_createGrid:函数(功能){
这个。添加({
xtype:“rallygrid”,
store:Ext.create('Rally.data.custom.store'{
数据:特征,
页面大小:100
}),
专栏CFGS:[
{
text:'Formatted ID',dataIndex:'FormattedID',xtype:'templatecolumn',
tpl:Ext.create('Rally.ui.renderer.template.FormattedIDTemplate')
},
{
文本:“名称”,数据索引:“名称”
},
{
文本:“发布”,数据索引:“发布”
},
{
文本:“故事计数”,数据索引:“故事计数”
},
{
文本:“用户故事”,数据索引:“用户故事”,
渲染器:函数(值){
var html=[];
Ext.Array.each(值、函数(用户故事){
html.push(“”)
});
返回html.join(',');
}
}
]
});
},
_onDataLoaded:函数(存储、数据){
var特征=[];
var pendingstories=data.length;
//调试器;
Ext.Array.each(数据、函数(功能){
var release=feature.get('release');
变量f={
FormattedID:feature.get('FormattedID'),
名称:feature.get('Name'),
Release:(Release&&Release.Name)| |“无”,
_ref:feature.get(“\u ref”),
StoryCount:feature.get('UserStories').Count,
用户故事:[]
};
var stories=feature.getCollection('UserStories');
故事·负载({
获取:['FormattedID'],
回调:函数(记录、操作、成功){
Ext.Array.each(记录、函数(故事){
var number=story.get('DirectChildrenCount');
如果(数字==0){
f、 UserStories.push({u-ref:story.get(''u-ref'),
FormattedID:story.get('FormattedID')
});}
},这个);
--悬而未决;
如果(挂起状态===0){
这是.\u createGrid(功能);
}
},
范围:本
});
特征:推送(f);
},这个);
}
});