Запрос свойств атрибута для dojo.data.ItemFileWriteStore (не так просто) - PullRequest
1 голос
/ 29 марта 2011

У меня есть объект dojo.data.ItemFileWriteStore с элементами, которые содержат атрибут 'children', который, в свою очередь, содержит массив дочерних элементов.Я храню дерево, и мне нужно извлечь узлы листьев из этого дерева.Я написал метод извлечения, но он не будет работать с запросом «children: []». Как я могу получить элементы хранилища данных, которые имеют children.length 0 (конечные узлы)?Пустой массив без добавления таких атрибутов, как «leaf»: bool к моим элементам, очевидно, будет работать, но я бы предпочел не иметь дополнительного атрибута.

dojo.require(dojo.data.ItemFileWriteStore);

// A tree node with no children, these are the kind I want returned
// from the query!
var rootItem = {
        children: []
};

var treeStore = new dojo.data.ItemFileWriteStore({
    data: {
        items: [rootItem]
    }
}); 

//when dojo reaches one of its inner filtering methods
//there is a point where it calls dojo.some() to see
//which elements in the array to return which match the
//given items attribute, this is where it fails

treeStore.fetch({
    query: {children: []},
    queryOptions: {deep: true},
    onComplete: function(leafItems) {
        // All the items with no children here...
    }
});

Я также попытался вложить функцию для атрибута вбезрезультатно:

treeStore.fetch({
    query: {
        children: function(store, item){
                return store.getValue(item, 'children').length == 0;
        }
    },
    queryOptions: {deep: true},
    onComplete: function(leafItems) {
        // All the items with no children here...
    }
});

1 Ответ

1 голос
/ 31 мая 2011
baseStore.fetch({
                query:{id:'*'},
                onComplete:function(a,b,c){
                    dojo.forEach(a,function(item,index){
                        console.log(item.children);
                    })
                }
            })

если item.children не определен, то это тот «элемент», который вам нужен. Если вы не хотите использовать отдельную выборку для этой операции в одиночку, то используйте закрытое свойство _arrayOfAllItems в хранилище, чтобы получить плоское хранилище данных, при котором вы можете выполнить то же условие, упомянутое выше.

...