Javascript 为dijit.form.Select指定“标签”和“值”属性

Javascript 为dijit.form.Select指定“标签”和“值”属性,javascript,dojo,Javascript,Dojo,我使用的是dijit.form.ComboBox,但是需求已经改变,现在dijit.form.Select更合适 但是,在更改小部件类型后,我得到一个错误: TypeError:\u b6d.getLabel不是函数 从文档中,我看到dijit.form.Select在商店中选择expect字段id和label,而我的商店有id和name 文档中没有给出如何覆盖默认值的示例。那么,如何为dijit.form.Select指定id和标签属性呢 我的数据如下所示: [{"id":1,"name":"

我使用的是dijit.form.ComboBox,但是需求已经改变,现在dijit.form.Select更合适

但是,在更改小部件类型后,我得到一个错误:

TypeError:\u b6d.getLabel不是函数

从文档中,我看到dijit.form.Select在商店中选择expect字段id和label,而我的商店有id和name

文档中没有给出如何覆盖默认值的示例。那么,如何为dijit.form.Select指定id和标签属性呢

我的数据如下所示:

[{"id":1,"name":"Item 1"},{"id":2,"name":"Item 2"},{"id":3,"name":"Item 3"}]

如果不可能,我可以使用什么dijit小部件来选择仅限于来自商店的物品?

我认为您误读了文档。 它提到存储中的数据必须具有id和label属性,而不是value和label属性。 存储的id将是使用getvalue调用获得的值。 要获取值,您需要在小部件上使用getvalue函数,即

widget.get("value")
对于标签,我假设它是

widget.get("label")


[{"id":1,"name":"Item 1","label":"Item 1"},{"id":2,"name":"Item 2","label":"Item 2"},{"id":3,"name":"Item 3","label":"Item 3"}]

我认为你误读了文件。 它提到存储中的数据必须具有id和label属性,而不是value和label属性。 存储的id将是使用getvalue调用获得的值。 要获取值,您需要在小部件上使用getvalue函数,即

widget.get("value")
对于标签,我假设它是

widget.get("label")


[{"id":1,"name":"Item 1","label":"Item 1"},{"id":2,"name":"Item 2","label":"Item 2"},{"id":3,"name":"Item 3","label":"Item 3"}]
您可以使用将选择限制为仅限于商店中的项目。实现它应该不会有太多麻烦,因为ComboBox和FilteringSelect都使用dijit/form/ComboBoxMixin来提供ComboBox功能。

您可以使用a将选择限制为仅限于商店中的项目。实现它应该不会太麻烦,因为ComboBox和FilteringSelect都使用dijit/form/ComboBoxMixin来提供ComboBox功能。

dijit/form/Select上有一个labelAttr属性,您可以使用它来更改label属性的名称

例如:

new Select({
    store: myStore,
    labelAttr: "name" // Now the name attribute will be used
}, "mySelect");
var myStore = new Memory({
    idProperty: "id",
    data: [{
        "id":1,
        "name":"Item 1"
    }, {
        "id":2,
        "name":"Item 2"
    }, {
        "id":3,
        "name":"Item 3"
    }]
});
如果您还想更改用于ID的属性,在本例中不需要更改,但您询问了如何指定该属性,那么您应该查看dojo/store/Memory的idProperty,例如:

new Select({
    store: myStore,
    labelAttr: "name" // Now the name attribute will be used
}, "mySelect");
var myStore = new Memory({
    idProperty: "id",
    data: [{
        "id":1,
        "name":"Item 1"
    }, {
        "id":2,
        "name":"Item 2"
    }, {
        "id":3,
        "name":"Item 3"
    }]
});
可以在JSFiddle上找到完整的示例:

dijit/form/Select上有一个labelAttr属性,您可以使用它来更改label属性的名称

例如:

new Select({
    store: myStore,
    labelAttr: "name" // Now the name attribute will be used
}, "mySelect");
var myStore = new Memory({
    idProperty: "id",
    data: [{
        "id":1,
        "name":"Item 1"
    }, {
        "id":2,
        "name":"Item 2"
    }, {
        "id":3,
        "name":"Item 3"
    }]
});
如果您还想更改用于ID的属性,在本例中不需要更改,但您询问了如何指定该属性,那么您应该查看dojo/store/Memory的idProperty,例如:

new Select({
    store: myStore,
    labelAttr: "name" // Now the name attribute will be used
}, "mySelect");
var myStore = new Memory({
    idProperty: "id",
    data: [{
        "id":1,
        "name":"Item 1"
    }, {
        "id":2,
        "name":"Item 2"
    }, {
        "id":3,
        "name":"Item 3"
    }]
});

可以在JSFIDLE上找到一个完整的示例:

好吧,它没有太多变化。我的数据没有标签属性。我需要说,Select应该使用name。否则就没用了。嗯,变化也没那么大。我的数据没有标签属性。我需要说,Select应该使用name。否则就不行了。