Dojo 1.9:Dijit:禁用使用商店填充的 dijit/表单/筛选选择中的选项项

Dojo 1.9: Dijit: Disabling option items in a dijit/Form/FilteringSelect that was populated using a store

本文关键字:dijit 表单 筛选 选择 选项 Dijit Dojo 填充      更新时间:2023-09-26

我正在尝试禁用使用 store 填充的 dijit/Form/FilteringSelect 控件中的选项项。

遵循本指南:http://dojotoolkit.org/documentation/tutorials/1.9/selects_using_stores/

似乎只有在不使用存储的情况下创建 Select 控件时才有可能。我从调试 FilteringSelect 示例中推断出了这一点。我尝试了两种方法来禁用项目:

  1. 遵循此线程中的建议:如何在 dijit.form.Select 中禁用单个选项?但是,FilteringSelect 示例中的"stateStore"存储对象没有"选项"属性。

  2. 尝试访问存储对象中的相应元素。例如,在"筛选选择"示例中,我执行以下操作:

    var optionItem = stateStore.get("AZ");
    optionItem.disabled = true;
    stateStore.put(optionItem);
    select.startup();
    

这两种方法似乎都不起作用,因此似乎在 Dijit Select 控件中禁用项目的唯一方法是改用 options 属性。提前感谢您的解决方案!

商店中的数据(实际上是业务数据)和呈现的数据(包含视图逻辑)之间存在差异。如果您使用商店,则实际上是将呈现的数据与商店一起提供。

要更改呈现的数据(= 您选择的选项),您需要使用 API 文档中可以阅读的dijit/form/SelectgetOptions(idx) 方法。要更改选项的disabled状态,您可以使用:

registry.byId("mySelect").getOptions(myId).disabled = true;

这就是您所需要的。更改商店数据无济于事,因为它表示业务数据,而不是视图数据。我还做了一个示例JSFiddle,其中第二个选项被禁用。

对于 Dojo 1.10 和最高 1.x 的最新版本,您需要添加一行代码来更新选择 UI:

registry.byId("mySelect").getOptions(myId).disabled = true;
registry.byId("mySelect").updateOption(myId);