19

我有 ExtJs 的问题combobox,考虑我有一个combobox有 4 个项目和一个select事件 on的回调函数combobox

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

我该如何解决这个问题?

我应该自己触发这个事件setValue()吗?

4

2 回答 2

21

我可以告诉你一年前 sencha 支持人员对此有何评论:

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

无论如何,“修复”很简单:你知道你调用了 select 所以在调用 select 之后你可以调用你的 select 监听器函数。

这取决于你的情况,你应该做什么。对我来说,我挂起我的实现,以便我能够调用重新负责的方法,但另一方面,当你自己触发事件时,我看不到任何不利因素。所以我认为这取决于你更喜欢哪种方法。

这是一个如何自己触发事件的示例(部分来自@JohanHaest的评论)

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

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

或者

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

当前版本 ( 4.1.3select ) 中将 方法的第二个参数设置为true. 根据源代码,这将触发 select 事件。但是第一个参数必须是一个模型实例。

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

所以打电话

combo.select(model, true);

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

于 2013-01-10T07:53:08.010 回答
3

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

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

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


我也认为你想要的事件就是change事件 -文档(4.1)说

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

select仅在有人单击组合框时触发

顺便说一句,但我也会质疑为此使用事件 - 你知道你已经调用了 setValue 那么为什么不做你想要在调用 set value 后发生的事情。事件倾向于使代码更加混乱,如果您不需要多播,那么通常最好不要打扰它们。

于 2014-09-18T09:33:02.343 回答