You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于UserIterationCapacity的Agile Central应用设置调用无响应求助

兄弟,我之前在做Rally TimeboxScopedApp的时候也碰到过一模一样的问题——获取设置时代码直接卡壳,连个警告都没有,简直头大!结合你给出的代码片段和踩过的坑,我大概率能猜到问题出在哪,给你几个排查方向和完整的修复示例:

最可能的问题:getSettingsFields 实现不完整或有误

你代码里只写了 getSettingsFields: function() { r...,这明显没写完。这个方法必须返回一个完整的配置字段数组,而且每个字段的name要和defaultSettings里的key完全对应,否则Rally的设置系统会静默失败,直接导致后续获取设置的代码停摆。

完整的可运行示例代码

我把你需要的逻辑补全,你可以直接参考:

Ext.define('CustomApp', {
    extend: 'Rally.app.TimeboxScopedApp',
    componentCls: 'app',
    scopeType: 'iteration', // 根据你的需求改成release也可以

    config: {
        defaultSettings: {
            hoursPerSp: 6,
            decimalsOnHoursPerSp: 1
        }
    },

    // 必须返回完整的设置字段配置数组
    getSettingsFields: function() {
        return [
            {
                name: 'hoursPerSp', // 和defaultSettings里的key严格对应
                xtype: 'rallynumberfield',
                fieldLabel: 'Hours per Story Point',
                minValue: 0.1,
                maxValue: 24,
                allowBlank: false
            },
            {
                name: 'decimalsOnHoursPerSp', // 同样严格对应
                xtype: 'rallynumberfield',
                fieldLabel: 'Decimal Places for Hours',
                minValue: 0,
                maxValue: 3,
                allowBlank: false,
                integerOnly: true
            }
        ];
    },

    // 不要在initComponent里获取设置,launch才是安全的时机
    launch: function() {
        try {
            // 安全获取设置,加上try-catch避免静默崩溃
            const hoursPerSp = this.getSetting('hoursPerSp');
            const decimals = this.getSetting('decimalsOnHoursPerSp');
            
            console.log('Loaded settings:', hoursPerSp, decimals);
            // 这里继续你的核心逻辑,比如处理UserIterationCapacity
            this._renderCapacityCalculator(hoursPerSp, decimals);
        } catch (e) {
            console.error('Failed to load settings:', e);
            // 给用户显示错误提示
            this.add({
                xtype: 'component',
                html: `<p>Oops! Failed to load application settings: ${e.message}</p>`
            });
        }
    },

    _renderCapacityCalculator: function(hoursPerSp, decimals) {
        // 这里写你的UserIterationCapacity相关逻辑
        this.add({
            xtype: 'component',
            html: `<p>Current Settings: ${hoursPerSp.toFixed(decimals)} hours per Story Point</p>`
        });
    }
});

几个关键注意点

  1. 生命周期时机:别在initComponent里调用getSetting,TimeboxScopedApp的设置初始化是异步的,launch方法才是组件完全初始化后执行的钩子,在这里获取设置最安全。
  2. 字段name匹配:getSettingsFields里每个字段的name必须和defaultSettings里的key完全一致,大小写都不能错,否则Rally找不到对应设置。
  3. 错误捕获:一定要用try-catch包裹获取设置的代码,不然出问题时控制台都没报错信息,根本没法调试。
  4. 调试技巧:打开浏览器开发者工具(F12)的控制台,即使代码看起来静默停止,控制台里大概率会有隐藏的错误提示,帮你定位问题。

内容的提问来源于stack exchange,提问作者Michael Østerberg Jakobsen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:16:36