敏捷中心示例应用程序失败

Agile Central example app failing

按照 here 列出的说明进行操作后,我在 Google Chrome 的开发人员工具中收到以下错误:

sdk-debug.js:147611 Error: success callback for Deferred transformed result of Deferred transformed result of Deferred threw: TypeError: Cannot read property 'project' of undefined
at Ext.define.getFullyQualifiedName (sdk-debug.js:163998)
at Ext.define.build (sdk-debug.js:164052)
at Ext.define.buildCompositeArtifact (sdk-debug.js:164152)
at Ext.define.getModel (sdk-debug.js:196664)
at Ext.define._buildColumnsFromModel (sdk-debug.js:196985)
at Ext.define._parseColumns (sdk-debug.js:196977)
at sdk-debug.js:146417
at Ext.define.notify (sdk-debug.js:146514)
at Ext.define.register (sdk-debug.js:146481)
at Ext.define.then (sdk-debug.js:146299)

我的订阅启用了 JSONP,我已经收到要在我的控制台上读出的消息。此外,我还获得了可以成功响应请求的网络服务。这个对我来说是新的。这 "should" 行得通,但行不通。这是示例本身的错误吗?

我实现的示例的完整源代码是 here

哇,好尴尬。这绝对是 Rally.ui.cardboard.CardBoard 组件的错误。从好的方面来说,您可以通过在示例代码中简单地包含当前上下文来解决它。

var cardBoardConfig = {
    xtype: 'rallycardboard',
    types: ['Defect', 'User Story'],
    attribute: 'ScheduleState',

    context: this.getContext(), //<-- NEW CODE HERE

    storeConfig: {
        filters: [this.iterationCombobox.getQueryFromSelected()]
    }
};

无论如何,向所有组件提供当前上下文通常是一种好的做法,但所有组件也应该足够智能,以便在未指定时仅使用默认值。

我将提交缺陷以修复卡片板组件以正确使用默认上下文,并修复示例以显式传递上下文。感谢您报告此问题,很抱歉给您带来麻烦!

这似乎是 rallycardboard 的配置如何处理 "types:" 属性中的条目的问题。如果您有 'User Story' 或 'Defect',它将起作用。但是,如果两者都有,则不会。

这个有效:

var cardBoardConfig = {
        xtype: 'rallycardboard',
        types: ['Defect'],
        attribute: 'ScheduleState',
        storeConfig: {
            filters: [this.iterationCombobox.getQueryFromSelected()]
        }
    };
    this.cardBoard = this.add(cardBoardConfig);

这个有效:

var cardBoardConfig = {
        xtype: 'rallycardboard',
        types: ['User Story'],
        attribute: 'ScheduleState',
        storeConfig: {
            filters: [this.iterationCombobox.getQueryFromSelected()]
        }
    };
    this.cardBoard = this.add(cardBoardConfig);

这个(直接从引用的例子中复制)不起作用:

var cardBoardConfig = {
        xtype: 'rallycardboard',
        types: ['User Story', 'Defect'],
        attribute: 'ScheduleState',
        storeConfig: {
            filters: [this.iterationCombobox.getQueryFromSelected()]
        }
    };
    this.cardBoard = this.add(cardBoardConfig);