如何从 Dijit FilteringSelect 小部件中删除所有选项?

Posted

技术标签:

【中文标题】如何从 Dijit FilteringSelect 小部件中删除所有选项?【英文标题】:How to remove all options from a Dijit FilteringSelect widget? 【发布时间】:2013-04-15 12:11:19 【问题描述】:

我尝试从 dijit.form.filteringselect 中删除所有选项,并使用以下函数向 dijit.form.filteringselect 添加一个选项。但是,我收到一个错误:没有方法 getOptions 和 addOption。我正在使用道场 1.7

function showTablesDropDown(tableDiv)
  dijit.byId(tableDiv).removeOption(dijit.byId(tableDiv).getOptions());
  dijit.byId(tableDiv).addOption(dojo.create("option", label:"None", value:"None"));

如何从 dijit.form.filteringselect 中删除所有选项并将选项添加到 dijit.form.filteringselect?

【问题讨论】:

你为什么有dijit.byId(tableDiv) dijit.byId(tableDiv) 是过滤选择的ID 有什么解决办法吗? @DimitriM 【参考方案1】:

这里的问题只是对FilteringSelect(以及从_AutoCompleterMixin 继承的任何东西)如何与其数据交互的轻微误解。无论您如何创建 FilteringSelect 小部件,控制其选项的底层机制都是遵循 Dojo Store API 的对象。

这意味着为了修改您的FilteringSelect 小部件的选项,您需要与此store 进行交互。我有set up this fiddle 来演示,但基本上你想将你的功能更改为:

function showTablesDropDown(tableDiv)
   var filteringSelectWidget = dijit.byId(tableDiv);

   // Clear current value since options are changing.
   filteringSelectWidget.set("value", ""); 

   var store = filteringSelectWidget.get("store");
   var newData = [label: "None", value: "None"];    

   // Give the underlying store a new data array.
   store.setData(newData);

【讨论】:

我不想添加 label:"None", value:"None" 来存储。所以我尝试了这个。 dijit.byId(tableDiv).set("value",label:"None", value:"None");但它不工作 我认为您的示例是替换存储并将 newData 添加到存储。我不想替换商店,只是想在 dijit.byId(tableDiv) 中添加新选项而不是存储 好吧,您的FilteringSelect 小部件使用存储来保存您的所有选项。因此,您不只是将项目直接添加到FilteringSelect,而是将项目添加到FilteringSelect 的商店。因此,您只想向商店添加新商品(并保留所有原始商品)?还是您只是想将FilteringSelect 的值设置为尚不存在的选项?

以上是关于如何从 Dijit FilteringSelect 小部件中删除所有选项?的主要内容,如果未能解决你的问题,请参考以下文章

带有子字符串搜索的 dijit.form.FilteringSelect

如何在 dojo 中获取 FilteringSelect <select> 的“值”?

如何将 Dijit 小部件动态添加到 Dojo 表单?

如何以给定格式从 dijit.form.DateTextBox 获取日期?

将数据推送到 Dojo Filteringselect(带代码)

选择值后强制 FilteringSelect 失去焦点