dojo 1.10添加CheckedMultiSelect的排序行为

时间:2015-07-01 15:31:07

标签: sorting dojo

大家好我很想拼命地尝试对CheckedMultiSelect进行排序,尽管改变了商店中数据的顺序,但它总是按字母顺序显示。

作为相对较新的道场,我试图四处寻找教程,但唉,我没有快乐。

有人可以向我解释如何最好地对由Memory存储区填充的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和控制台中看到数据的顺序正确但是现在我看不到除了复选框之外的任何内容,还有一个空格,选择的值应该是这样。)

我不知道这是否会有所帮助,但这是设置填充多选的数据的代码,事先只需将字符串解析为商店对象。

无论我做什么我都无法得到改变的顺序,即使改变商店数据中元素的顺序也不会产生一点点差别,我猜测CheckedMultiSelect存在某种行为方面的问题排序,但它只是那个;一个猜测。

1 个答案:

答案 0 :(得分:3)

您设置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