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 不会发出新请求,而是将原始结果返回给您。您可以通过两种方式更改此行为:

  • 设置useFiltertrue让您的findAll调用调用DS#filter并返回结果。
  • 设置bypassCachetrue强制通过适配器重新加载数据。

作为一般经验法则,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 回答