首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让JSData DS#create()持久化到数据存储

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

Stack Overflow用户
提问于 2016-06-06 05:35:48
回答 1查看 199关注 0票数 0

从下面的代码可以看出,每次运行save()函数时,控制台的值都会增加。但是,该数字不会更新。所以我没有看到任何创建的值被注入到create的存储中。

代码语言:javascript
复制
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()时,它不再调用服务器(这是预期的行为),但是它也不会将新创建的值注入到存储中。

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

EN

回答 1

Stack Overflow用户

发布于 2016-10-22 00:40:17

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

  • useFilter设置为true可让findAll调用DS#filter并向您返回结果。
  • bypassCache设置为<代码>D13以强制通过适配器重新加载数据。

根据一般经验,findAll用于将记录异步加载到存储中(例如,通过HTTP适配器GET请求),而filter用于在需要时同步选择存储中的记录(例如,在视图中显示它们)。

例如,在一个地方执行以下操作:

代码语言:javascript
复制
// Post records get retrieved and loaded into the store
store.findAll('post', { status: 'published }).then(...);

然后在其他地方:

代码语言:javascript
复制
// Need to display post records in your View
$scope.posts = store.filter('post', { status: 'published' });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37647014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档