为什么这些记录没有存储在缓存中?

2023-11-30

我想在收到记录后对其进行缓存,但我不知道如何进行。根据文档,您只需调用this.store.push('model', record),但似乎不起作用。 Ember 在每次调用路由时都会从服务器请求数据,我只想执行一次,并在从服务器获取数据后使用本地存储。

如果我尝试按照建议进行调试文档,我发现没有缓存:

Pd.__container__.lookup('store:main').recordCache 
// --> undefined

这是我的路线(我尝试缓存它):

Pd.ProductsRoute = Ember.Route.extend({
    model: function () {
        var promise = this.store.find('product');
        var that = this;
        promise.then(function(value) {

            // Caching supposed to happen here
            value.content.forEach(function(product){
                that.store.push('product', product); 
            });

        }, function(reason) {
            // on rejection
        });
        return promise;
    }
});

这是相应的适配器(似乎工作正常):

Pd.ProductAdapter = DS.RESTAdapter.extend({
    primaryKey: 'nid', // DOES NOT WORK BUT I CAN LIVE WITH THAT (SEE WORKAROUND)

    findAll: function(store, type) {
        var url = 'ws/rest/products';

        return new Ember.RSVP.Promise(function(resolve, reject) {

            jQuery.getJSON(url).then(function(data) {
                Ember.Logger.debug("Received Products:"); // TRIGGERS EVERY TIME!

                var srcPattern = /src=["']([^'"]+)/;

                data.forEach(function(product){
                    product.id = product.nid;
                    product.field_image = srcPattern.exec(product.field_image)[1];
                });

                Ember.Logger.debug(data);

                Ember.run(null, resolve, {product: data});
            }, function(jqXHR) {
                jqXHR.then = null; // tame jQuery's ill mannered promises
                Ember.run(null, reject, jqXHR);
            });
        });
    }
});

this.store.find('type')总是会调用服务器进行记录。如果您只想对服务器进行一次调用,请在ApplicationRoute然后而不是使用find使用all过滤多次命中的路由内部。

Pd.ApplicationRoute = Em.Route.extend({
  model: function(params){

    return Em.RSVP.hash({
       product: this.store.find('product'),
       somethingElse: otherPromise
    })
  }
});

Pd.ProductRoute = Em.Route.extend({
  model: function(params){
    return this.store.all('product');
  }
});

如果您只是想为商店准备好您的产品,您甚至不需要退货,或者在应用程序路径中使用它

Pd.ApplicationRoute = Em.Route.extend({
  model: function(params){
    this.store.find('product');
    return {foo:'bar'}; // or return nothing, it doesn't matter
  }
});

延迟加载模型

App.ProductRoute = Ember.Route.extend({
  hasPreLoaded: false,
  model: function() {
    if(this.get('hasPreLoaded')){
      return this.store.all('product');
    } else {
      this.toggleProperty('hasPreLoaded');
      return this.store.find('product');
    }
  }
});

Example

http://emberjs.jsbin.com/OxIDiVU/482/edit

您不在适配器上定义主键,它在序列化器上定义

Pd.ProductSerializer = DS.RESTSerializer.extend({
  primaryKey: 'nid'
});

缓存不再存在于那里,它存在于this.store.typeMapFor(Pd.Product) or this.store.typeMaps.

在 ember data 1.0 发布之前,该网站仍然引用旧版本的 ember data,我假设您使用的是 1.0 beta 版本。该文档是最新的https://github.com/emberjs/data/blob/master/TRANSITION.md

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么这些记录没有存储在缓存中? 的相关文章

随机推荐

  • 自动检测新添加的源文件

    我的问题是 每次添加新的源文件时 我都被迫重新运行 CMake 这真的很烦人 有什么方法 CMake 可以自动检测新添加的源文件吗 CMake 没有观察文件夹的功能 某些操作系统 例如 MacOS X 可以在文件夹发生更改时执行操作 如果任
  • 如何使 C# Xamarin.Android 应用程序在手机启动时运行?

    我一直在尝试让应用程序在手机启动时运行 并最终在按下时运行应用程序KeyCode CameraButton 我正在使用一个名为BootReceiver 继承自BroadcastReceiver 这是我的课程 namespace ColorP
  • 我的 APK 的 META-INF 中的 androidx.XXXX.version 文件是什么?

    当使用 AndroidX 库构建 APK 时 我会得到很多小文本文件 例如META INF androidx core core version 这些文件的目的是什么 它们是如何使用的androidx 我最近也很好奇 所以浏览了一下源代码
  • 如何将 VSIX 输出包含在其包中?

    我创建了一个 VSIX 包 我想将它的输出 dll 包含在 VSIX 中 我尝试在资产部分的 vsixmanifest 文件中添加 MEF 组件引用 但它没有解决 任何想法 用记事本打开项目文件并将此项设置为 true
  • CSS 显示不起作用

    我真的很沮丧因为Display none没有在处理 tr IE 7 中的元素 我该怎么办 它在 FF Chrome 等上完美运行 首先使用以下工具检查您的代码是否正确 HTML 验证器 CSS 验证器 tr
  • 使用 json lib 使用 Python 从嵌套 JSON 中获取元素

    我想列出 BoxDet 中名称为 BoxDet 的所有元素 目的是以这种方式列出它 BoxDet ABC 我的 JSON 的一小部分 id 1 name BoxH readOnly true children id 100 name Box
  • 从 Hoxton.SR4 升级到 Spring Cloud Hoxton.SR7 后遇到错误

    使用 Spring CloudHoxton SR4和 Spring Boot2 2 9 RELEASE库 我的 Spring Boot 微服务可以正确启动 并且在本地环境中针对 localstack 运行时运行得很好 但是当我升级到Hoxt
  • 如何通过 LINQ to XML 创建字典

    我有以下 XML
  • PhoneGap 未发出 AJAX (jsonp) 请求

    我一整天都在努力解决这个问题 并用谷歌搜索了所有地方 可能我只是找不到包含解决方案的一页 但我已经查看了问题和解决方案 例如 Ajax 调用phonegap 不发送请求 JQuery mobile Phonegap Ajax 调用无法在 A
  • 将具有相同 ID 类和标签 HTML 的多个元素拖放到屏幕上的任意位置

    大家好 这是我的第一个问题 所以我可能做错了 我想要实现的是拥有多个
  • 实现 PostgreSQL 表的历史记录

    我想实现 PostgreSQL 表的更改历史记录 该表的定义方式如下 CREATE TABLE ps counters psid integer NOT NULL counter bigint NOT NULL 我希望历史表看起来像 CRE
  • 读取刚刚写入临时文件的数据[重复]

    这个问题在这里已经有答案了 在 Go 中 我尝试将数据写入临时文件 然后转身读取该文件 但没有成功 下面是一个精简的测试程序 我已通过检查临时文件验证数据是否已写入文件 所以 至少我知道数据正在进入文件 我只是无法读出它 提前谢谢你的帮助
  • TMDb API 调用 - Swift

    我正在打电话TMDb Api按类型获取一系列电影 我想访问的许多属性都返回 nil 例如 vote count poster path 和 vote average 如果我在浏览器中调用 api 我会按预期获得所有属性 这是我的模型 imp
  • 如何使用 android 中的 zxing 库从相机预览中解码条形码?

    我想在我的 android 应用程序中实现独立的扫描仪 我在我的项目中使用 zxing 的 core jar 库 我需要从相机预览中解码条形码 但我不知道如何实现它 因为没有官方文档 您能为我提供一个有关以下事项的简单示例吗 1 初始化相机
  • Paypal 错误:文件系统检查失败

    我知道 SO 上有两篇关于此错误的帖子 就像我发现的每个谷歌结果一样 解决方案是 不要使用越狱设备 但我的很干净 我的客户也是如此 我用 Paypal 开发了两个应用程序 第一个效果非常好 第二个在 Paypal 按钮初始化时在调试器中显示
  • 如何使用多个 OR 语句根据对象的属性过滤数组

    这个问题很难用语言表达 但这是我的情况 我在一个名为的数组中有几个 Monster 对象monsters 每个怪物都有一个name属性是一个字符串 我有第二个数组称为monsterNames 其中包含几个怪物名称 作为字符串 我希望能够过滤
  • 如何避免 Angular 2 在链接中添加前缀“unsafe”? [复制]

    这个问题在这里已经有答案了 使用Angular 2 是否有一个设置可以避免添加前缀 unsafe 到链接 我需要为 Angular 2 中默认未列入白名单的协议设置链接 但我们的内部应用程序需要它 因此结果是无效链接 a href a pl
  • 带有文本和图像的 Android 按钮

    在看到有关此功能的许多问题并尝试遵循答案后 我想知道是否有更清晰的示例 编辑 我试图制作一个大按钮 其中的图像和文本位于 中间 它必须表现为一个按钮 StateList 可绘制 并且图像 文本对应该分组并居中 作为一个组 如果您喜欢带有图像
  • 如何在 ASP.Net MVC2 中完成这种类型的 URL?

    我有一个名为 类别 的表 我希望用户从类别列表中单击 然后加载该类别中所有拍卖的列表 很简单 对吧 我可以为每个类别创建一个操作 例如 public ActionResult Cellphones public ActionResult E
  • 为什么这些记录没有存储在缓存中?

    我想在收到记录后对其进行缓存 但我不知道如何进行 根据文档 您只需调用this store push model record 但似乎不起作用 Ember 在每次调用路由时都会从服务器请求数据 我只想执行一次 并在从服务器获取数据后使用本地