【问题标题】:ExtJs didn't fire select event on ComboBoxExtJs 没有在 ComboBox 上触发选择事件
【发布时间】:2018-04-12 02:58:58
【问题描述】:

我在使用 ExtJs combobox 时遇到问题,考虑一下我有一个 combobox,它在 combobox 上的 select 事件中有 4 个项目和一个回调函数。

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

我该如何解决这个问题?

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

【问题讨论】:

    标签: extjs combobox extjs4


    【解决方案1】:

    我可以告诉你一年前 sencha 支持人员告诉过你什么:

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

    无论如何,“修复”很简单:你知道你调用 select so 之后 调用 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);
    

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

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

    所以打电话

    combo.select(model, true);
    

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

    【讨论】:

    • 感谢您的回答。所以,我应该自己触发select事件吧?
    • 是的,要么自己调用select监听函数。
    • 以下代码触发事件:combo.fireEvent('select', combo, records);
    • @AfshinMehrabani 好吧,没什么好说的,只是你必须自己从绑定到组合的商店中获取记录
    • @AvinashT。不,那是错误的。 When the picker is closed the event is not fired.正如我在编辑中所述,您必须使用 hack 来存档此文件
    【解决方案2】:

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

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

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


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

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

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

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

    【讨论】:

    • 非常感谢!我有一些具有相同值的组合测试数据,但我无法更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    • 2017-10-28
    相关资源
    最近更新 更多