dojo 1.10 添加 CheckedMultiSelect 的排序行为

dojo 1.10 adding sort behaviour of CheckedMultiSelect

大家好,我拼命尝试对 CheckedMultiSelect 进行排序,但运气不佳,似乎尽管更改了商店中数据的顺序,但它始终按字母顺序显示。

作为 dojo 的新手,我曾尝试四处寻找教程,但遗憾的是,我并不喜欢。

有人可以向我解释如何最好地对内存存储填充的 CheckedMultiSelect 中的数据进行排序吗?

代码:

var store = new Memory({'data', : data});
//where this is my CheckedMultiSelect box
this._set("store", store);

在我的 postCreate 函数中,我现在这样做:

this.options = this.store.query({}, {sort: [{attribute: "name", descending: "true"}]});
this._set("labelAttr", "name");
 console.log(this.options);

我可以在 firebug 和控制台中看到数据的顺序是正确的,但是现在除了复选框我什么都看不到,有一个 space,其中 select离子应该是)。

我不知道这是否有帮助,但这是设置填充 multi 的数据的代码 select,之前的一切只是将字符串解析到存储对象中。

无论我做什么,我都无法更改顺序,即使更改商店数据中元素的顺序也不会造成盲目差异,我猜测 CheckedMultiSelect 具有某种行为关于排序,仅此而已;一个猜测。

您设置 sortByLabel: false,然后提供一个 queryOptions 对象(参见下面的示例)。

至于为什么我们需要 sortByLabel,请参阅 _FormSelectWidget

    // sortByLabel: Boolean
    //      Flag to sort the options returned from a store by the label of
    //      the store.
    sortByLabel: true,

...虽然似乎有 plans to deprecate it.

示例如下:

var checkedMultiSelect = new CheckedMultiSelect ({
    dropDown: true,
    multiple: true,
    labelAttr: "label", // Need this to be able to use Memory directly
    sortByLabel: false, // Need this to override sort
    queryOptions: {     // Now, finally, specify sort order.
        sort: [
          {attribute:'sortByMeFirst'},
          {attribute:'sortByMeSecond', descending: true}
        ]
    },
    store: memoryStore
}, "dropdown");

参见:jsfiddle sorting a CheckedMultiSelect