2011-07-17 14 views
1

私はSencha Touchでモバイルアプリを開発しており、重複することなく以前の検索の詳細をローカルに保存する必要があります。Sencha Touchストアのユニークな値

検索、保存、表示は正常に機能しますが、同じ検索を2回実行すると、そのエントリが自分の店舗に複製されます。

私は店の "id"がこれをすると思ったが、何かが間違っていると思った。

ここに店舗のコードを示します。

Ext.regModel('sSaved', { 
     fields: [ 
      {name: 'IDs',  type: 'int'}, 
      {name: 'Outward',  type: 'string'}, 
      {name: 'Return',  type: 'string'}, 
      {name: 'Pickup',  type: 'string'}, 
      {name: 'Destination',  type: 'string'} 
     ], 
     proxy: { 
      type: 'localstorage', 
      id:'IDs' 
     } 
    });    

    var savedJobs = new Ext.DataView({ 
     store: new Ext.data.Store({ 
      model: 'sSaved', 
      storeId: 'allSaved'  
     }), 
     tpl: new Ext.XTemplate(
      '<tpl for=".">', 
       '<table class="item" style="margin:auto;">', 
        '<tr><td class="title">ID</td><td>{IDs}</td></tr>', 
        '<tr><td class="title">Outward</td><td>{Outward}</td></tr>', 
        '<tr><td class="title">Return</td><td>{Return}</td></tr>', 
        '<tr><td class="title">Pickup</td><td>{Pickup}</td></tr>', 
        '<tr><td class="title">Destination</td><td>{Destination}</td></tr>', 
       '</table>', 
      '</tpl>' 
     ), 
     itemSelector: "table.item", 
     autoHeight:true, 
     emptyText: 'No Saved Jobs', 
     autoLoad: true 
    });  

ストアを設定するコード。

var fetched = Ext.decode(result.responseText); 
    var details = fetched.apiResponse.details; 
    savedJobs.store.load(); 
    savedJobs.store.add({ 
     "IDs":details.ID, 
     "Outward":details.Outward, 
     "Return":details.Return, 
     "Pickup":details.Pickup, 
     "Destination":details.Destination 
    }); 
    savedJobs.store.sync(); 

これを回避するには、何らかの方法で店舗を検索し、追加する前に値が存在するかどうかをチェックすることができますが、より簡単な方法があると確信しています。

この検索 - >チェック - >追加が必要なアプローチの場合、リソースを最も集中させない方法は何ですか?

答えて

1

既存の値をチェックすることで傷つくことはありません - 私は約束します;)また、load()が終了した後でadd()を実行する必要があります。読み込みは非同期です(設定でasync:falseが指定されていない場合)には、そのデータに依存するものを指定する必要があります。1)店舗の 'load'イベントを経由するか、2)店舗のコールバックメソッドを指定します。負荷設定:

var fetched = Ext.decode(result.responseText); 
var details = fetched.apiResponse.details; 
savedJobs.store.load({ 
    callback: function() { 
     if(!savedJobs.store.getById(details.ID) { 
      savedJobs.store.add({ 
       "IDs":details.ID, 
       "Outward":details.Outward, 
       "Return":details.Return, 
       "Pickup":details.Pickup, 
       "Destination":details.Destination 
      }); 
     } 
    } 
}); 

savedJobs.store.sync();