0

以下のコードから、関数を実行するたびにコンソールの値が増加すると予想されsave()ます。ただし、番号は更新されません。そのため、作成時に作成された値がストアに注入されていません。

Budget = DS.defineResource('budget')

function save(){
      Budget.create(this.budgetItem, {upsert: true})
        .then( (   ) => {
          Budget.findAll().then((data)=>console.log(data.length))
        })
}

私はjsdata-angularを使用しています。

最初の保存findAll()が実行されると、サーバーからレコードが取得され、キャッシュされます。その後、findAll() を実行するときにサーバーへの将来の呼び出しを行いません (これは予期される動作です) が、新しく作成された値をストアに注入することもありません。

私の設定はすべて変更されません。私はすべてデフォルトを使用しています。

4

1 に答える 1

0

DS#findAllアダプターを介して永続レイヤーからレコードを取得し、それらをストアにロードするためのものです。デフォルトでは、findAll呼び出しを行ってからまったく同じfindAll呼び出しを (同じquery引数で) 再度行うと、新しい要求を行う代わりに、JSData は元の結果を返します。この動作は、次の 2 つの方法で変更できます。

  • 呼び出しを呼び出して結果を返すように設定useFiltertrueます。findAllDS#filter
  • アダプターを介してデータを強制的に再ロードするには、 に設定bypassCacheします。true

一般的な経験則として、findAll(HTTP アダプターの GET 要求などを介して) レコードをストアに非同期にロードするためfilterのものであり、必要なときにストアからレコードを同期的に選択するためのものです (ビューに表示するなど)。

たとえば、ある場所で次のようにします。

// Post records get retrieved and loaded into the store
store.findAll('post', { status: 'published }).then(...);

それから他の場所:

// Need to display post records in your View
$scope.posts = store.filter('post', { status: 'published' });
于 2016-10-21T16:40:16.777 に答える