Selectfield侦听器在视图初始化时触发

时间:2014-02-19 13:57:09

标签: javascript extjs sencha-touch

这有点难以解释所以我正在尽力而为,如果我的问题含糊不清,请求更清晰。

我正在用商店中的选项填充选择字段。此表单显示在用户点击我的常规列表视图中的行时获取的详细视图。这一切都完美无瑕。

我在push()中使用record.data将相关数据传递给detailview,并使用初始化侦听器捕获此数据并在detailview上填充一些项目(标题,表单等)。

我的selectfield有一个更改侦听器,一旦字段更改,就会执行ajax请求。会发生什么是我的selectfield首先从商店加载选项,然后调用初始化侦听器。

每次加载视图时都会产生一个ajax请求。因为我的初始化侦听器更改了选择域以将另一个选项显示为活动,所以selectfield认为某些内容已更改并触发更改侦听器。

在不触发更改侦听器的情况下,将selectfield选项设置为活动状态的最佳方法是什么?

带有更改侦听器的Selectfield:

xtype: 'selectfield',
itemId:'groundtype',
displayField: 'ground_name',    
valueField: 'ground_id',
store: 'groundTypeStore',
listeners: {
    change: function (data) {
        // execute ajax request on change
    }
}

表单面板(detailview)初始化侦听器

listeners: 
{
    initialize: function(){
        var value = this.config.record;

        if(value != null){
            this.down('#groundtype').setValue(value.groundtype);

        }
    }
}

提前致谢!

1 个答案:

答案 0 :(得分:1)

您可以使用suspendEvents功能设置值时暂停字段的事件:

var field = this.down('#groundtype');
field.suspendEvents();
field.setValue(value.groundtype);
field.resumeEvents(true);

注意,您需要将true传递给resumeEvents才能放弃排队的事件。