удалить элемент из dojo.store.jsonrest - PullRequest
1 голос
/ 20 января 2012

Я начал с этого урока http://dojotoolkit.org/documentation/tutorials/1.6/store_driven_tree/

после настройки службы ServerSide Restfull все работает до сих пор.Я создал контекстное меню для дерева:

<ul dojoType="dijit.Menu" id="contextMenu" style="display: none;">
<li dojoType="dijit.MenuItem" iconClass="dijitEditorIcon dijitEditorIconDelete" onclick="pages.remove(tn.item.id);">delete page</li>
</ul>

<script type="dojo/connect">
var menu = dijit.byId("contextMenu");
menu.bindDomNode(this.domNode);

dojo.connect(menu, "_openMyself", this, function(e){
    // get a hold of, and log out, the tree node that was the source of this open event
    tn = dijit.getEnclosingWidget(e.target);

    // contrived condition: disable all menu items except the "New Page" item
    dojo.forEach(menu.getChildren(), function(child){
        if(child.label != "Neue Seite")
        {
            child.set('disabled', typeof tn.item == 'undefined');
        }
    });
});
</script>

Теперь я знаю, на каком узле пользователь щелкнул правой кнопкой мыши контекстное меню и удалил его с помощью "pages.remove (tn.item.id);"из базы данных.Чтобы уведомить дерево, я перезаписываю функцию удаления:

remove: function(objectId){

    this.onDelete({id: objectId});
    return dojo.store.JsonRest.prototype.remove.apply(this, arguments);

}

Все работает, как и ожидалось, но если я сейчас делаю некоторые другие вещи с элементами в дереве, например, перетащите n, отпустите элемент в корень, я былудаляя ребенка раньше.Дерево больше не показывает это правильно.Я думаю, что метод удаления из хранилища только отправляет запрос DELETE на сервер, но не удаляет элемент из хранилища.Как я могу получить массив элементов в магазине для проверки и, возможно, для удаления элементов?

1 Ответ

0 голосов
/ 20 января 2012

Dijit.Tree - это представление базовой модели dojo.data, и любые изменения, которые вы хотите внести в дерево, действительно необходимо внести в базовое хранилище данных.См. Описание здесь: http://dojotoolkit.org/reference-guide/dijit/Tree.html#dijit-tree Таким образом, вместо переопределения функции удаления, вы должны вместо этого использовать API dojo.data, чтобы изменить хранилище, а затем перерисовать дерево, чтобы отразить изменения.Лучший источник информации о различных доступных методах - ночные файлы додзё.В частности, файлы dojo.data находятся здесь: http://archive.dojotoolkit.org/nightly/dojotoolkit/dojo/data/

var item = tree.fetchItemByIdentity("selectedItem");  //find the item you want to remove
store.deleteItem(item);               //delete the item from the data store
store.save();                         //save the change made to the store
...