ExtJs没有在ComboBox上触发select事件

时间:2013-01-10 07:42:33

标签: extjs combobox extjs4

我在使用ExtJs combobox时遇到问题,我认为combobox有一个select,其{4}} combobox事件中有4个项目和回调函数。

当我要使用combobox设置setValue()选定值时,ExtJs不会触发select事件。

如何解决此问题?

我应该在setValue()之后自己发起这个事件吗?

2 个答案:

答案 0 :(得分:19)

我可以告诉你一年前sencha支持的内容:

  

嗯,根据定义,事件是由用户触发的函数调用   当您调用select时,操作并没有用户操作。

     

无论如何,“修复”很简单:你知道你刚刚调用select   调用select你可以调用你的select listener函数。

这取决于你的情况你应该做什么。对我来说,我挂了我的实现,以便我能够调用负责任的方法,但另一方面,当你自己解雇事件时,我没有看到任何缺点。所以我认为你更喜欢哪种方法取决于你。

以下是您可以自行解雇活动的示例(部分来自@JohanHaest的评论)

为了简单起见,我说你只启用了单一选择

var record = combo.store.getById(id);
combo.select(id);
combo.fireEvent('select', combo, record);

combo.select(model);
combo.fireEvent('select', combo, model);

select方法的第二个参数设置为true时,当前版本(4.1.3)中存在可能的Hack 。根据源代码,这将触发select事件。但是First参数必须是Model实例。

// source-snipped
select: function(r, /* private */ assert)

所以打电话

combo.select(model, true);

将触发select事件,但此行为可能随时(版本)发生更改,因为断言被标记为私有

答案 1 :(得分:3)

我遇到了这个问题,因为我在组合框上错误地使用了valueField ...我不确定这应该做什么,但是如果你设置错误它会破坏组合框 - 它会阻止发射change事件并阻止select事件多次触发。

我的猜测就是它所以你可以在列表中有多个表示相同项目的对象,而valueField表示键,所以如果你设置错误,那么所有内容的键都是未定义的,因此对于所有内容都是相同的。这意味着在第一组计算为新值之后没有任何内容。

这似乎是非常小众的行为(而不是我想要的)所以我只是在我的情况下将其剥离并且事情开始起作用。


另外,我认为你想要的事件是change事件 - the documentation(对于4.1)说

Fires when the value of a field is changed via the setValue method.

select仅在有人点击组合框

时触发

稍微偏僻一点,但我也会对此事件提出质疑 - 你知道你已经打电话给setValue所以为什么不做你想要发生的事情呢?你调用设定值。事件有使代码更容易混淆的倾向,如果你不需要多播,那么通常最好不要打扰它们。