Dijit Selects, Items in the Combobox disabled = true doesn't works

373 views Asked by At

This is my code and it doesn't works. It belong to a combobox. Some items should be disabled in it.

var data = [];

for (i = 0; i < items.length; i++) {
     data.push({id: items[i].id, label: "foobaa"});
     data.getOptions(items[i].id).disabled = true;
}

var memory = new Memory({
    idProperty: "id",
    data: data
});

this._widget.set("store", memory);

I found a code snipe at fiddle.net and this works but im not able to converte it to my problem.

http://jsfiddle.net/g00glen00b/akcZy/

Also the otherwise super documentation of dojo doesn't helps me :-(

http://dojotoolkit.org/documentation/tutorials/1.10/selects_using_stores/

3

There are 3 answers

1
post4dirk On BEST ANSWER
items: {
        mutators: {
            value: [],
            type: verify.ARRAY
        },
        widget: {
            updateI18n: true,
            mapping: function (widget, items) {

                if (this._widget) {
                    var i;
                    var data = [];


                    for (i = 0; i < items.length; i++) {
                        data.push({id: items[i].id, label: i18n.resolveSequence(items[i].label)});
                        //register.byId(data).getOptions((items[i].value).disabled = true);
                    }


                    var memory = new Memory({
                        idProperty: "id",
                        data: data
                    });

                    this._widget.set("store", memory);

                    this._widget.closeDropDown(true);
                    this._widget.reset();

                    if (items.length === 0) {
                        this._enabledItems = false;
                    }
                    else if (items.length === 1) {
                        this.set("selectedId", items[0].id);
                        this._enabledItems = (this.get("selectedId") !==    items[0].id);
                    }
                    else {
                        this._enabledItems = true;
                    }

                   this._widget.set("disabled", !(this._enabledState && this._enabledItems ));
                }
            }
        }
    },




_createWidget: function () {
        var ret;
        ret = new Select({id: this.uniqueId, disabled: true, labelAttr: "label", labelType: "Text", required: false, store: new Memory({data: []})});


        var that = this;
        ret.own(on(ret, "change", function (value) {that._onChange(value); }));

        return ret;
    },
9
vijay On

I have made some changes try this and let me know is this your need? Use the code below to disable all the select items.

 var data = [];

for (i = 0; i < myData.length; i++) {
  data.push('{id: myData[i].id, label: "foobaa"}');
  registry.byId("mySelect").getOptions(myData[i].id).disabled = true;
}

http://jsfiddle.net/f3snxrrd/

http://jsfiddle.net/5pgkkf0z/

0
post4dirk On

This is the items array:

enter image description here

The code from jsfiddle.net

http://jsfiddle.net/8m52n81u/11/

I can't change the items array :-/

items = [{
  id: "0",
  label: key[{0: "foo", 1: "baa"}]
}, {
  id: "1",
  label: key[{0: "foo", 1: "baa"}]
}];

require([
 "dojo/ready",
 "dijit/registry",
 "dijit/form/Select",
 "dojo/store/Memory",
 "dojo/parser"
], function(ready, registry) {
 ready(function() {

   var data = [];

   for (i = 0; i < items.length; i++) {
     data.push('{id: items[i].id, label: items[i].label}');
     registry.byId("uniqueId").getOptions(items[i].id).disabled = true;
   }

  });
});