【问题标题】:Dojo 1.9: Dijit: Disabling option items in a dijit/Form/FilteringSelect that was populated using a storeDojo 1.9:Dijit:禁用使用商店填充的 dijit/Form/FilteringSelect 中的选项项
【发布时间】:2013-09-11 09:27:37
【问题描述】:

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

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

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

  1. 遵循此线程中的建议:How to disable a single option in a dijit.form.Select?。但是,FilteringSelect 示例中的“stateStore”存储对象没有“选项”属性。

  2. 尝试访问存储对象中的适当元素。例如,在 FilteringSelect 示例中,我执行以下操作:

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

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

【问题讨论】:

    标签: javascript dojo


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 非常感谢,没想到解决办法这么简单!
    【解决方案2】:

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

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

    【讨论】:

    • 添加更多的描述文件
    猜你喜欢
    • 2013-12-19
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多