ember 数据序列化器数据映射

2023-11-30

我正在使用 ember 和 ember-data 尝试使用来自服务器的 json feed。这是我的代码:

App = Ember.Application.create();

DS.RESTAdapter.configure(
    "plurals", {
        category: 'categories'
    }
);

App.Store = DS.Store.extend({
    revision: 12,
    adapter: DS.RESTAdapter.create({
        url: 'app'
    })
});

App.Router.map(function(){
    this.resource('categories');
});

App.CategoriesRoute = Ember.Route.extend({
    model: function() {
        return App.Category.find();
    }
});

var attr = DS.attr;

App.Category = DS.Model.extend({
    name: attr('string')
});

现在这在测试服务器上运行得很好。 使用以下 JSON

{
    "categories":[
        {
            "name":"Beef",
            "id":1
        },
        {
            "name":"Pork",
            "id":2
        }
    ]
}

但是在生产环境中,服务器提供以下 json:

{
    "success":true,
    "message":"Request successful",
    "total":2,
    "data":[
        {
            "name":"Beef",
            "id":1
        },
        {
            "name":"Pork",
            "id":2
        }
    ]
}

我一生都无法弄清楚如何使用序列化器来使用实时 json。任何帮助,将不胜感激。提前致谢。

UPDATE:

此后我尝试编写序列化器,但它似乎不起作用......

见下文

App.Store = DS.Store.extend({
    revision: 12,
    adapter: DS.RESTAdapter.create({
        url: 'app',
        serializer: DS.RESTSerializer.extend({
            extract: function(loader, json, type, record) {
                var root = 'data';
                this.sideload(loader, type, json, root);
                this.extractMeta(loader, type, json);
                if (json[root]) {
                    if (record) { loader.updateId(record, json[root]); }
                    this.extractRecordRepresentation(loader, type, json[root]);
                }
            }
        })
    })
});

现在会产生此错误Uncaught Error: assertion failed: Your server returned a hash with the key data but you have no mapping for it


你有2个选择

  • 让你的服务器兼容,并让它返回 json 作为 ember 数据所期望的,
  • 编写您自己的适配器/序列化器来支持这种格式。

更新:编写自己的序列化器 更新2:删除未使用的功能

https://github.com/emberjs/data/blob/master/packages/ember-data/lib/serializers/json_serializer.js#L196

您可以继承自DS.RESTSerializer并改变extract用这个代码

  extract: function(loader, json, type, record) {
    var root = 'data';

    if (json[root]) {
      if (record) { loader.updateId(record, json[root]); }
      this.extractRecordRepresentation(loader, type, json[root]);
    }
  }

这假设请求的内容始终位于data你的 json 的键。

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

ember 数据序列化器数据映射 的相关文章

  • JavaScript onTouch 不工作

    谁能告诉我为什么这个 onTouch 处理程序没有触发 var myDiv document getElementById existingContent var myButton a href log out a myDiv append
  • 关闭选项卡时要求确认[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 当我在某些浏览器上关闭页面时 我希望出现一个消息框 并询问我是否真的要关闭页面 有两个按钮 如果我单击No那么这个标签就不会被关闭 我怎样
  • jquery.find() 可以只选择直接子项吗?

    我应该向 jQuery find 提供什么参数来选择元素子元素而不选择其他元素 我不能用 gt 引导选择器 而用 将选择所有后代 而不仅仅是直接子代 我知道 jQuery children 但这是一个库 因此用户能够提供自己的选择器 并且我
  • 在 Vue.js 中从父组件执行子方法

    目前 我有一个 Vue js 组件 其中包含其他组件的列表 我知道使用 vue 的常见方式是将数据传递给孩子 并从孩子向父母发出事件 但是 在这种情况下 我想在子组件中的按钮出现时执行子组件中的方法 parent被点击 哪种方法最好 一种建
  • 如何重定向到 instagram://user?username={username}

    我的 html 页面上有这个链接 可以在特定用户上打开 Instagram 应用程序 a href Link to Instagram Profile a 我一直在寻找自动运行 url instagram user username USE
  • 如何重置使用 JavaScript 更改的 CSS 属性?

    我的导航按钮的宽度从 100px 增加到 150px 当鼠标悬停在 nav li hover width 150px 但是使用 javascript 我已经做到了 无论选择哪个选项 宽度都将继续为 150px 当选择每个选项时 它会使其他选
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • 使用 Angular 下载具有动态 src 的脚本

    Angular 提供了通过动态名称动态加载模板的方法ng include 该部分中的内联 JS 和 CSS 可以正常加载 但没有一个好的方法来下载带有动态 url 的脚本 我们需要下载脚本 相对于调用它们的 html 部分的路径 即我们有一
  • Node.js:如何在检索数据(块)时关闭响应/请求

    我正在用 node js 构建一个应用程序 它加载多个页面并分析内容 因为 node js 发送块 所以我可以分析这些块 如果一个块包含例如索引 nofollow 我想关闭该连接并继续其余部分 var host example com to
  • 从未用 @flow 标记的导入文件中获取类型定义

    TL DR我怎么告诉flow从未声明的导入模块导入类型定义 flow 加长版 流接缝能够从不使用流语法的文件中派生类型 请参阅示例 示例文件 flow js if Math random lt 0 5 var y hello else va
  • 标签获取 href 值

    我有以下 html div class threeimages a img alt Australia src Images Services 20button tcm7 9688 gif a div class text h2 a hre
  • JavaScript 重定向到新窗口

    我有以下代码 它根据下拉列表的值重定向到页面 我如何使其在新窗口中打开 function goto form var index form select selectedIndex if form select options index
  • 在requestAnimationFrame中使用clearRect不显示动画

    我正在尝试在 HTML5 画布上做一个简单的 javascript 动画 现在我的画布是分层的 这样当我收到鼠标事件时 背景层不会改变 但带有头像的顶层会移动 如果我使用 requestAnimationFrame 并且不清除屏幕 我会看到
  • 在javascript中解析json - 长数字被四舍五入

    我需要解析一个包含长数字的 json 在 java servlet 中生成 问题是长数字被四舍五入 当执行这段代码时 var s x 6855337641038665531 var obj JSON parse s alert obj x
  • 表单计算器脚本基本价格未加载 OnLoad

    我的表单中有一个计算器来计算我的下拉选项选择 function select calculate on change calc input type checkbox calculate on click calc function cal
  • 为 illustrator 导出脚本以保存为 web jpg

    任何人都可以帮我为 illustrator CC2017 编写一个脚本 将文件以 JPG 格式导出到网络 旧版 然后保存文件并关闭 我有 700 个文件 每个文件有 2 个画板 单击 文件 gt 导出 gt 另存为 Web 旧版 然后右键文
  • 为什么在 Internet Explorer 中访问 localStorage 对象会引发错误?

    我正在解决一个客户端问题 Modernizr 意外地没有检测到对localStorageInternet Explorer 9 中的对象 我的页面正确使用 HTML 5 文档类型 并且开发人员工具报告该页面具有 IE9 的浏览器模式和 IE
  • JQuery 图像上传不适用于未来的活动

    我希望我的用户可以通过帖子上传图像 因此 每个回复表单都有一个上传表单 用户可以通过单击上传按钮上传图像 然后单击提交来提交帖子 现在我的上传表单可以上传第一个回复的图像 但第二个回复的上传不起作用 我的提交过程 Ajax 在 php 提交
  • 为什么 jquery 没有检测到单选按钮未被选中的情况? [复制]

    这个问题在这里已经有答案了 可能的重复 JQuery radioButton change 在取消选择期间不会触发 https stackoverflow com questions 5176803 jquery radiobutton c
  • 如何从图像输入中获取 xy 坐标?

    我有一个输入设置为图像类型

随机推荐

  • 在 WPF DataGrid 上显示行号的简单方法

    我只想在我的最左边的列中显示行号DataGrid 有什么属性可以做到这一点吗 请记住 这不是我的表的主键 当对列进行排序时 我不希望这些行号随行移动 我基本上想要一个运行计数 它甚至不需要有标题 一种方法是将它们添加到 DataGrid 的
  • 网络挖掘、抓取或爬行?我应该使用什么工具/库? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我想抓取一些网页并将其保存为 HTML 比如说 爬入数百个流行网站并简单地保存它们的首页和 关于 页面 我研究了很多问题 但没有从网络爬行或网络抓取
  • 如何使用c#执行AT命令

    我想知道如何在 C 中使用 AT CLCC 命令以及如何监视控制台中的响应 我尝试使用以下代码 但我无法取得进展 这是我到目前为止所尝试的 它没有给出任何响应 这是我的代码 serialPort WriteLine AT CLCC stri
  • Outlook 插件 window.open

    我是插件的新手 只想执行一个简单的任务 例如在任务栏中创建一个带有链接的按钮来打开浏览器 仅此而已 到目前为止 基于 ms 教程创建了项目 一切都运行良好 修复了证书问题 据我了解 这应该像创建一个带有 ExecuteFuncion 操作的
  • 警告:您似乎正在使用 Firebase JS SDK 的开发版本

    我已将 Firebase 集成到我的 React js 应用程序中 如下所示 https firebase google com docs database web start fire js import firebase from fi
  • Swing 外行分页

    在我开始之前 我的 类似的问题存在 我希望删除那个问题 因为我在那里没有很好地解释我的观点 但不是这个 谢谢 首先 我没有代码 这只是一个我无法弄清楚的概念 但这很有趣 至少对我来说 大家都知道 MSWord 是如何工作的 你写东西 然后
  • CSS 媒体查询和 JQuery 移动版哪个更好?

    我是开发移动网站的新手 我对两种方法感到非常困惑 因为我没有任何经验 两种方法之间哪个更好 当我们在css文件中使用所有宽度设备时的css查询 or 使用 jquery mobile 使用 php 技术为使用桌面或移动设备的不同用户提供服务
  • Google App Engine 找不到 gdata 模块

    我可以在本地主机上运行一个简单的 Hello World Google App Engine 应用程序 没有任何问题 但是 当我将 import gdata auth 行添加到我的 Python 脚本中时 我收到 ImportError 没
  • HTTP 客户端是否允许发送多个同名标头?

    我知道 HTTP 服务器可以发送带有重复键的标头 至少Set Cookie我想到了 但是客户这样做有合理的理由吗 RFC 7230 在某些情况下允许重复标头 从第3 2 2节 发送方不得生成具有相同字段的多个标头字段 消息中的名称 除非该名
  • Firebase user.updateProfile({...}) 在 React 应用程序中不起作用

    所以 我有这个 ReactJS 应用程序 有一个用户数据库 创建用户的函数是这样的 import ref firebaseAuth from Components config export function auth email pw r
  • Rust 特征的简单组织以实现“多态”返回

    我有一个名为的基本结构Frame这对于一系列计算很有用 pub struct Frame
  • C++ try-except语句

    我看到这篇关于检测 VMWare 或 Virtual PC 的文章 http www codeproject com KB system VmDetect aspx我看到他们使用某种 try except 语句 于是我在MSDN上查了一下
  • 实体框架中的动态表名称

    我正在使用实体框架和数据库优先的方法 我想根据条件动态更改表名称或视图名称 在这里 我正在使用V OVT VLD 340B DNA CLD or V OVT B table or V OVT c table获取记录 根据来源 我需要调用不同
  • VBA - 将条件评估为字符串

    我遇到过一个非常奇怪的场景 在函数中 我将收到一串要评估的条件 E g a gt b and b 2 or c 3 其中 a b 和 c 是我的变量名 我尝试并搜索了很多 但没有得到任何有意义的东西 所以我的问题是 是否可以评估这样的字符串
  • 每天下午 5 点重复 UILocalNotification

    如何每天下午 5 点重复 UILocalNotification 以下是我设置自定义时间的代码 但我想每天在自定义时间或可能是静态时间通知用户 我使用的是 iOS 6 void scheduleNotification NSDateForm
  • xpath 表达式“html/body/div/text()[1]”的结果是:[object Text]。使用 Selenium 打印元素文本应该是元素错误

    我正在尝试从此示例 HTML 中提取 479 div 479 Miles Away div 我在 Python 中使用以下 Selenium 代码 xpath html body div text 1 WebDriverWait drive
  • 将 dict 的元组键转换为新的 dict

    我有一个dict像这样 America 25 m IT 10000 America 22 m IT 8999 Japan 24 f IT 9999 Japan 23 f IT 9000 现在 我想用密钥获取所有结果 America m IT
  • 以管理员身份从 Java 运行 Windows 命令行 - 创建 .manifest 文件

    我正在运行 Windows 7 Pro 并在 Eclipse 中开发 Java 应用程序 我需要 Eclipse 将用户指定的命令 例如 chkdsk C 发送到命令提示符 然后将命令提示符打印的任何内容输出到 Eclipse 中的控制台
  • Log4j 配置(基于大小)不起作用

    我有我的申请 以下条目是在Log4j属性文件 基于大小的滚动不适用于此应用程序 文件在 5 MB 时不会滚动 应用程序会继续记录并以 GB 为单位进行记录 一次运行会生成大约 6 MB 的日志 应用程序每天运行多次 有人可以帮助指出我在哪里
  • ember 数据序列化器数据映射

    我正在使用 ember 和 ember data 尝试使用来自服务器的 json feed 这是我的代码 App Ember Application create DS RESTAdapter configure plurals categ