如何让JSData DS#create()持久化到数据存储

时间:2016-06-05 21:35:48

标签: angularjs jsdata js-data-angular

从下面的代码中,我希望每次运行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()时,它不会在将来调用服务器(这是预期的行为),但它也不会将新创建的值注入到存储中。

我的所有配置都保持不变。我正在使用所有默认值。

1 个答案:

答案 0 :(得分:0)

DS#findAll用于通过适配器从持久层检索记录并将其加载到存储中。默认情况下,如果您进行findAll调用,然后再次进行完全相同的findAll调用(使用相同的query参数),那么JSData将返回给您,而不是发出新请求原来的结果。您可以通过两种方式更改此行为:

  • useFilter设置为true以进行findAll调用DS#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' });