我在使用ExtJs combobox
时遇到问题,我认为combobox
有一个select
,其{4}} combobox
事件中有4个项目和回调函数。
当我要使用combobox
设置setValue()
选定值时,ExtJs不会触发select
事件。
如何解决此问题?
我应该在setValue()
之后自己发起这个事件吗?
答案 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所以为什么不做你想要发生的事情呢?你调用设定值。事件有使代码更容易混淆的倾向,如果你不需要多播,那么通常最好不要打扰它们。