2013-02-11 1 views
0

Я установил небольшой скрипт для тестирования JRS и клиентского фильтра. Я использовал то, что мог найти в Интернете, чтобы настроить его, но он не работает. Я пытаюсь выполнить выборку на стороне клиента на JRS, используя clientFilter. Тем не менее, JRS запрашивает бэкэнд вместо выполнения клиентской проверки. Я вставил сценарий ниже, я надеюсь, что один из вас может объяснить, почему он не работает.JSonRestStore и CLientfilter

Благодаря

<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <link rel="stylesheet" type="text/css" href="js/dojo-release-1.7.2/dojo/resources/dojo.css"/> 
    <link rel="stylesheet" type="text/css" href="js/dojo-release-1.7.2/dijit/themes/tundra/tundra.css"/> 

    <script> 
     dojoConfig= { 
      has: { 
       "dojo-firebug": true 
      }, 
      parseOnLoad: true, 
      isDebug: true, 
      locale: "nl" 
     }; 
    </script> 

    <script type="text/javascript" src="js/dojo-release-1.7.2/dojo/dojo.js"></script> 

    <script type="text/javascript"> 
     dojo.require("dojox.data.ClientFilter"); 
     dojo.require("dojox.data.JsonRestStore"); 
     dojo.require("dijit.form.Button"); 

     myStore = new dojox.data.JsonRestStore({target:"TARGET"}); 
     myStore.fetch(); 

     dojo.ready(function() { 
      dojo.connect(dijit.byId("query"), "onClick", function() { 
       myStore.fetch({query:{id:"4"},queryOptions:{cache:true}, onItem: function(item) {console.log(item); }}); 
      }); 
     }); 
    </script> 
</head> 

<body cllass="tundra"> 
    <button type="button" id="query" data-dojo-type="dijit.form.Button">Query</button> 
</body> 

ответ

0

Я сделал jsfiddle, который показывает, как сделать это с новым синтаксисом и додзе магазинах. http://jsfiddle.net/SgyYW/

require([ 
"dojo/store/Cache", 
"dojo/store/JsonRest", 
"dojo/store/Memory", 
"dojo/parser", 
"dojo/on", 
"dojo/ready", 
"dijit/form/Button", 
"dijit/registry" 
],function(Cache,JsonRest,Memory,parser,on,ready,Button,registry){ 
console.log('x'); 
var someData = [ 
    {id:1, name:"One"}, 
    {id:2, name:"Two"}, 
    {id:3, name:"Three"}, 
    {id:4, name:"Four"}, 
    {id:5, name:"Five"} 
]; 
recToQuery = 4; 
// recToQuery = 6; // try one that is not in the cache 
var memoryStore = new Memory({data: someData}); 
var restStore = new JsonRest({ target: "/i/dont/exist.json/"}); 
var myStore = new Cache(restStore, memoryStore); 
myStore.query({}); // this will ask for everything and prime the cache 
ready(function(){ 
    parser.parse(); 
    var queryBtn = registry.byId("query"); 
    console.log('queryBtn',queryBtn); 
    on(queryBtn, "click", function() { 
     console.log('query button clicked',[this,arguments]); 
     var resultOrPromise = myStore.get(recToQuery); 
     if (typeof resultOrPromise.then ==='function'){ 
      // it is asking the server 
      resultOrPromise.then(function(){ 
       console.log('Result from server fetch',arguments); 
      },function(){ 
       console.log('it queried the server but failed',arguments); 
      }); 
     }else{ 
      // it is in the cache (from the first query) 
      console.log('result from cache:',resultOrPromise); 
     } 
    });//end connect 
}); //end ready 
}); //end require 
+0

Спасибо, пара вопросов, почему вы используете новый синтаксис, это связано с какой-либо известной ошибкой со старым синтаксисом? Сам магазин отличается от того, который я использую, jsonreststore и reststore, к сожалению, пока я не могу переключиться из-за объема реинжиниринга, который он создаст :( – Remco

+0

Вы можете использовать их вместе, чтобы облегчить вашу боль перехода. 2.0, поддержка старого синтаксиса будет удалена. Где я работаю, у нас все еще есть много виджетов, использующих старые виджеты. Старые виджеты могут использовать новые, а новые могут использовать старые. – Remento