大家好,我拼命尝试对 CheckedMultiSelect 进行排序,但运气不佳,似乎尽管更改了存储中数据的顺序,但它始终按字母顺序显示。
作为道场相对较新的人,我尝试四处寻找教程,但可惜我没有任何乐趣。
有人可以向我解释如何最好地对由内存存储填充的 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 存在某种行为排序但仅此而已;一个猜测。
最佳答案
您设置 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");
关于sorting - dojo 1.10 添加 CheckedMultiSelect 的排序行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31165677/