Rally App SDK 2.0rc1 - 为什么我的组合框只在第一次点击时才会忽略数据存储过滤器?

时间:2013-12-09 18:50:06

标签: javascript combobox rally

我有以下代码(马虎,我知道......第一个javascript应用程序)。我试图让一个组合框填充一个属于给定版本的功能列表(在第一个组合框中选择)。几乎所有东西现在都正常工作,除了每次我第一次点击功能组合框时,它会加载所有功能并完全忽略过滤器。即使我首先更改了发布框,功能框仍然只在第一次单击时填充所有功能。随后的时间会显示正确过滤的功能。

更奇怪的是,我已经尝试将功能存储中的总记录写入控制台,因此我可以看到这种情况何时发生。首次创建要素组合框时,其中包含正确的记录数。但是,只要我第一次单击功能组合框,它就会触发组合框的“加载”监听器,并拉入所有功能,完全忽略过滤器。

我很高兴,我已经尝试了很多东西来调试这个,而且此时没有其他选择。有没有人有任何想法,为什么它会首先加载正确的数据,然后重新加载它并忽略第一次点击过滤器?

Ext.define('CustomApp', {
extend: 'Rally.app.App',
componentCls: 'app',

launch: function() {

    var relComboBox = Ext.create("Rally.ui.combobox.ReleaseComboBox", {
        fieldLabel: 'Choose a Release',
        width: 300,
        listeners: {
            ready: function(combobox) {
                this._releaseRef = combobox.getRecord().get("_ref");
                this._loadFeatureInfo();
            },
            select: function(combobox) {
                this._releaseRef = combobox.getRecord().get("_ref");
                this._loadFeatureInfo();
            },
            scope: this
        }
    });

    this.add(relComboBox);
},
_loadFeatureInfo: function() {
    var featureStore = Ext.create("Rally.data.WsapiDataStore", {
        model: "portfolioitem/Feature",
        fetch: ["Name", "_ref"],
        autoLoad: true,
        filters: [
            {
                property: "Release",
                operator: "=",
                value: this._releaseRef
            }
        ],
        listeners: {
            load: function(store) {
                this._updateFeatureBox(store);
            },
            scope: this
        }
    });
},
_createFeatureBox: function(featureStore) {
    this._featureComboBox = Ext.create("Rally.ui.combobox.ComboBox", {
        fieldLabel: 'Choose a Feature to move',
        store: featureStore,
        listeners: {
            select: function (combobox) {
                this._featureRef = combobox.getRecord().get("_ref");
                //calls method to get and display children of this feature in a grid
            },
            scope: this
        }
    });
    this.add(this._featureComboBox);
},
_updateFeatureBox: function(featureStore) {
    if (this._featureComboBox === undefined) {
        this._createFeatureBox(featureStore);
    } else {
        this._featureComboBox.clearValue();
        this._featureComboBox.bindStore(featureStore);
        //calls method to get and display children of this feature in a grid
    }
}

1 个答案:

答案 0 :(得分:0)

这可能是由featureStore加载两次引起的问题:一旦你创建它,并且一旦用户打开组合框以选择一个特征,组合框也会告诉它再次加载。

我在故事中遇到了一个与组合框很相似的问题,而且我会向Matt Greer回答的甜甜圈买单:

Strange Load behavior with Rally.ui.combobox.ComboBox

对我的问题,也是你的答案......