Настройка dijit.Файл cookie в виде дерева для всех страниц

#tree #dojo

#дерево #dojo

Вопрос:

Я использую тот же dijit.Древовидный просмотр нескольких страниц в нашем приложении, и я бы хотел, чтобы файл cookie сохранялся для имени сервера, а не для имени папки.
Прямо сейчас у меня есть 3 страницы и 3 файла cookie, каждый из которых содержит свою собственную информацию о состоянии дерева, что немного раздражает.

Есть ли способы добиться этого? Единственное, что я нашел о файлах cookie в API, это то, что я могу устанавливать cookieName и включать / выключать файлы cookie.

Ответ №1:

Похоже, что Tree.js это не позволит вам установить атрибуты для файла cookie. Итак, мне просто пришлось перезаписать _saveState() метод для Tree :

 var treeControl = new dijit.Tree({
    model: treeModel,
    showRoot: false,
    openOnClick: false,
    cookieName: "OrganizationUnitTreeState",
    _saveState: function(){
        // summary:
        // Create and save a cookie with the currently expanded nodes identifiers
        // Overre the default saveState function, so we can set the cookie path
        if(!this.persist){
            return;
        }
        var ary = [];
        for(var id in this._openedItemIds){
            ary.push(id);
        }
        dojo.cookie(this.cookieName, ary.join(","), {expires:365, path:"/"});
    },
    /* Many more methods */
});
  

Это последняя строка кода, которая делает трюк. dojo.cookie() Принимает список пар ключ / значение, которые будут преобразованы в атрибуты файла cookie, поэтому, если вы хотите установить какие-либо другие атрибуты, вот как вы это сделаете.

Комментарии:

1. Очень полезно. Было бы неплохо, если бы это был официальный API для изменения устойчивости дерева на общесистемную. Вы можете подать заявку на повышение квалификации.