如何禁用Scout 2024中SearchOutline输入框的按键触发自动搜索?
解决Scout 2024 SearchOutline实时搜索改为回车触发的方案
方案一:重写SearchOutline的输入事件逻辑
直接继承SearchOutline,修改搜索输入框的事件绑定,替换默认的实时搜索为回车触发:
import { SearchOutline } from '@eclipse-scout/core'; export class CustomSearchOutline extends SearchOutline { protected override _initSearchField(): void { super._initSearchField(); const searchField = this.searchField; // 移除默认的实时搜索keyup监听 searchField.off('keyup', this._onSearchFieldKeyUp.bind(this)); // 添加回车触发搜索的监听 searchField.on('keydown', (event) => { if (event.key === 'Enter') { event.preventDefault(); this.search(); // 手动触发搜索逻辑 } }); // 保留搜索按钮的点击触发逻辑(可选) searchField.on('search', () => { this.search(); }); } }
这种方式能保留SearchOutline原有的外观和基础功能,仅修改触发时机,适合想复用原有UI的场景。
方案二:自定义Outline+独立搜索框
如果需要更灵活的搜索意图分析逻辑,可以放弃SearchOutline,基于AbstractOutline手动实现搜索触发:
import { AbstractOutline, SearchField, Toolbar } from '@eclipse-scout/core'; export class CustomManualSearchOutline extends AbstractOutline { protected override _createToolbar(): Toolbar { const toolbar = super._createToolbar(); // 创建自定义搜索输入框 const searchField = this._createWidget(SearchField, { placeholder: '输入关键词后按回车搜索' }); // 监听回车事件执行搜索 searchField.on('keydown', (event) => { if (event.key === 'Enter') { event.preventDefault(); const searchText = searchField.value.trim(); if (searchText) { this._analyzeAndPerformSearch(searchText); } } }); toolbar.addAt(searchField, 0); return toolbar; } protected _analyzeAndPerformSearch(searchText: string): void { // 这里实现你的搜索意图分析逻辑 let targetPage; if (searchText.startsWith('user:')) { // 匹配用户搜索意图,创建对应页面 targetPage = this._createUserSearchPage(searchText.slice(5)); } else if (searchText.startsWith('order:')) { // 匹配订单搜索意图 targetPage = this._createOrderSearchPage(searchText.slice(6)); } else { // 通用搜索逻辑 targetPage = this._createGeneralSearchPage(searchText); } // 更新Outline内容 this.nodePage = targetPage; this.reloadPage(); } // 实现各类型搜索页面的创建方法 protected _createUserSearchPage(query: string) { // 返回用户搜索对应的Page实例 } protected _createOrderSearchPage(query: string) { // 返回订单搜索对应的Page实例 } protected _createGeneralSearchPage(query: string) { // 返回通用搜索对应的Page实例 } }
这种方案完全由你控制搜索时机和逻辑,适合需要对输入做复杂意图判断的场景。
关于getConfiguredMinSearchTokenLength()无效的说明
这个方法的作用是设置触发实时搜索的最小字符数,比如设为5时,用户输入第5个字符才会自动触发搜索,但它无法实现“仅回车触发”的需求——只要用户输入达到设定长度,还是会自动执行搜索,不符合你需要完整输入后再判断的场景,因此这个方法不适用。
内容的提问来源于stack exchange,提问作者mike240
相关产品推荐
相关产品推荐

