как отключить кэш в дереве REST в DOJO с полным кодом для его воспроизведения - PullRequest
0 голосов
/ 12 мая 2018

В следующем коде показано дерево в Dojo с использованием dojox.data.JsonRestStore с одним узлом с именем Changing0, для которого загружаются дочерние элементы.проблема заключается в обновлении дерева путем переименования одного узла (Changing1, Changing2, ...) без изменения его ссылочного номера или идентификатора.Вопрос заключается в следующем: если это проблема с кэшированием, как отключить кэширование.Обратите внимание, что в файле журнала мы видим, что REST функционирует нормально, но имя в дереве не изменяется.Даже если мы используем refresh2 () вместо refresh1 (), удалив целое дерево и его данные и воссоздав его.Возможно, это ссылка на $ ref, которая хранится в ссылках javascript, поскольку мы не меняем идентификатор.код следующий: reproduction_problem.php:

<?php
if(!isset($_SESSION)) 
    { 
        session_start(); 
    } 
$_SESSION['keyA']=0;    
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Reproducing Cache Problem</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!--META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE"-->
<script type="text/javascript" src="../external/dojo/dojo.js"  djConfig="parseOnLoad: true"></script>
<script type="text/javascript">
dojo.require('dojox.data.JsonRestStore');
dojo.require('dijit.Tree');
dojo.require("dijit.form.Button");

var prod= {
    store: null,
    model: null,
    tree: null,

    init: function() {
        this.store = new dojox.data.JsonRestStore({
            target: 'reproducing-REST.php',
            labelAttribute: "name"
        });

        this.model = new dijit.tree.ForestStoreModel({
            store: this.store,
            deferItemLoadingUntilExpand: true,
            rootId: "products",
            rootLabel: "Products",
            query: {queryOptions:{cache:false}},            
            childrenAttrs: ['children']
        });
    }
};
function refresh1() {
    tree=prod.tree
    tree._itemNodesMap = {};
    tree.rootNode.state = "UNCHECKED";
    tree.model.root.children = null;
    if (tree.rootNode) {
        tree.rootNode.destroyRecursive();
    }
    tree._load();
}
function refresh2() {
    delete prod.tree;
    delete prod.model;
    delete prod.store;
    dijit.byId('products_tree').destroy(true);
    prod.init();
    prod.tree = new dijit.Tree({
            model: prod.model,
            query: {queryOptions:{preventCache:true}},                      
            persist: false
        }, 'products_tree');
    prod.tree.startup();
}
dojo.addOnLoad(function() { 
    prod.init();
    //prod.store.fetch({queryOptions:{cache:false}});
    prod.tree = new dijit.Tree({
            model: prod.model,
            //query: {queryOptions:{cache:false}},  
            persist: false
        }, 'products_tree');
    prod.tree.startup();    
});

</script>
<style type="text/css">
@import "../external/dijit/themes/soria/soria.css";
@import "../external/dojo/resources/dojo.css";
</style>
</head>

<body class="soria">
    <div dojoType="dijit.form.Button">
       Change name and refresh
       <script type="dojo/event" event="onClick">
           refresh1();
       </script>
    </div> 
    <div id="products_tree"></div>
    <div id="notes">notes</div>
</body>
</html>

reproduction-REST.php:

<?php
if(!isset($_SESSION)) 
{ 
    session_start(); 
} 
$keyA=$_SESSION['keyA'];
$_SESSION['keyA']=$keyA+1;
if (array_key_exists('PATH_INFO', $_SERVER)) {
    $arr = null;
    $resource = $_SERVER['PATH_INFO'];
    $method = $_SERVER['REQUEST_METHOD'];   
    error_log("  resource: ".$resource." \n",3,"mylogfile.txt");    
    if ($method == 'GET') {
        if ($resource=='/'){
            $arr=array();   
            $sameref='1234';
            $name="Changing".$keyA;
            error_log("  name: ".$name." \n",3,"mylogfile.txt");
            array_push($arr,array('$ref' => $sameref, 'name' => $name, 'children' => true));
        }
        else{
            $aProduct = ltrim($resource, '/');
            $arr=array();
            $name="exploding";
            $child='2345';
            array_push($arr,array('name' => $name,'idq' => $child));
            $arr=array('idp' => $aProduct, 'name' => $name, 'children' => $arr);
        }
        $status = 'HTTP/1.1 200 OK';
    }
    header($status);
    echo json_encode($arr); 
}
?>

спасибо

...