问题标签 [ember-data]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ember.js - Ember 数据:使用 findAll 的正确方法
我正在尝试使用https://github.com/emberjs/data作为参考来使用 ember-data。
具体来说,我正在尝试使用数组控制器来显示我的数据库中的所有“Person”对象。我还想允许用户创建一个新的“人”。
我有以下有效的代码:
但是,每次创建新人时重置内容属性似乎效率低下。如果我删除最后一行并将代码更改为以下内容:
每次调用 newPerson 时仍会创建一个新视图,但会复制相同的对象。基本上发生的事情是所有新模板每次都使用创建的第一个对象而不是一个新对象。我认为这与以下错误有关:https ://github.com/emberjs/data/issues/11 。
作为参考,我的模板逻辑如下:
当我使用我的代码的第二个版本时——带有行的那个@set('content', App.store.findAll(App.Annotation))
——clientId 对于每个 Person 对象都是重复的。在第一个版本中,客户端 ID 是正确的。
任何人都可以在这里阐明一下吗?我这样做正确吗?我的直觉告诉我这是一个错误,但我不确定。
ember.js - EmberJS、EmberJS/Data 和 Sproutcore-Datastore
随着从 SproutCore 2.0 到 EmberJS 的迁移,命名空间和 Github 存储库迁移。核心内容似乎已移至http://github.com/emberjs组织的 Github 帐户,而其他一些似乎已移至“插件”帐户http://github.com/emberjs-addons。
我目前正在研究 EmberJS 与 RESTful 服务器一起使用,提供 JSON。
我的问题是:我是使用新的http://github.com/emberjs/data代码还是旧的http://github.com/emberjs-addons/sproutcore-datastore代码?我会假设前者,但我只想确定并澄清旧的 SproutCore“插件”发生了什么。
ember.js - Ember 数据 - 如何更新记录
我确实使用 ember-data 与 sinatra json-app 对话实现了一些代码。方法 findAll 按预期工作并加载记录。我也确实在 DS.Store.create 中实现了 updateRecord 方法,但并不真正知道如何更新和提交。请在此处查看代码(为简洁起见,我没有包含 jquery 函数): http: //pastie.org/3197008
我尝试了以下方法:
但我收到以下错误:TypeError: Object (subclass of DS.State) has no method 'enter'
我应该如何更新记录?还是我忘记为更新实现一些东西?
提前致谢!
ember.js - 使用 Ember 和 Ember-data:如何在商店完成加载和/或关联视图完成重新渲染时设置回调?
我正在使用 Ember 和 Ember-data 从 REST API 加载几百个对象,使用自定义适配器中的 findAll 调用。我有一个引用 findAll 的 ArrayController.content,然后使用最近添加的 Ember.Select在选择小部件/下拉菜单中显示对象。一旦使用所有对象(每个对象都是选择的一个选项)完全呈现选择小部件后,我需要在选择小部件上运行一个函数 - 特别是Chosen.js 库。
因为处理选择中的几百个对象需要一点时间(2-4 秒),所以在事件 Ember.Select.didInsertElement 和 Ember.ArrayController.contentDidChange 上使用回调不太有效;他们都开得太早了。那么是否有另一个事件或另一种方法可以用来代替?
javascript - 与 EmberJS/Data 关联的替代方案
我已经在 EmberJS 应用程序上工作了大约一周,并且已经为 EmberJS/Data 编写了我自己的 localStorage 适配器以允许数据持久性。该应用程序是一个小型笔记应用程序。理想情况下,我希望有一个 Notebook 模型,它有许多与之关联的 Note 模型。
但是,我还没有找到一种方法来生成可变数组。虽然您可以“实现” hasMany 关系...
... hasMany 方法创建的 ModelArray 在 EmberJS 中是不可变的。看来这目前正在处理中 - 这里有一个 EmberJS/Data 的“关联”分支-但修改 ModelArray 对这个应用程序至关重要,即创建一个新注:
尽管 EmberJS/Data 的最新提交确实包括数组可变性,但它仍然缺乏任何类型的观察 - 适配器在进行更改时不会收到通知,并且不会保存它们。
我想知道:在将此功能添加到 EmberJS/Data 之前,hasMany 关联的最佳替代方案是什么?我一直在研究不同的模式,例如在 Notebook 模型中有一个 note IDs 数组,并带有某种获取/检索接口,但我绝对无处可去。我今天花了很多时间试图找出最好的方法来做到这一点,而我所拥有的只是很多挫败感。
javascript - 带有 ember-data 的非 CRUD 操作
假设我有以下 ember-data 模型:
它使用以下非常标准的 CRUD API 与 Rails 应用程序通信:
这一切都使用标准的 Store/Adapter 映射到 Ember-Data。
但是,假设为了“加星”或“取消星”一个人,API 不允许我们通过标准更新操作来执行此操作。此操作有一个特定的 API 端点:
如何将此 API 与 Ember 数据相匹配?
看起来我需要以某种方式扩展 DS.Store 和 DS.RESTAdapter,但我不确定让他们了解这些不同操作的最佳方法。应用程序的通用适配器必须意识到主演的人也感觉有点不对劲。
请注意,我无法控制 API,因此我无法POST /people/id
意识到“星标”,以便它适合标准更新。
ember.js - 使用 Ember 数据和关系进行部分加载
我正在尝试编写一个 XMPP 解析器来管理一些 Ember Data 模型。信息是异步传入的,因此 AFAIK 它不适合适配器模式。在很多情况下,我可能会获得一些信息,并且我想基于此部分更新模型。
例如,有一条在线消息到达,我想保存它以便创建状态历史记录,但我还想使用此新信息查找和更新联系人。联系人可能有许多与状态无关的其他属性。联系人和存在模型之间存在一对多的关系。
目前我有一些看起来有点像这样的代码:
当一个新的出席消息进来时,如果没有联系人存在,它会创建一个,并使用 load 方法正确地建立关系。但是,如果我希望将出席记录添加到出席历史记录中,那么使用set
将不起作用。有趣的是,set
在处理 Presence 方面时确实有效。
我发现可以这样做:
这会添加对象,但不会触发对任何观察者的更新。
我究竟做错了什么?
asynchronous - 在 ember-data 中异步加载数据
我正在编写一个基于 ember-data 的应用程序,它异步加载所有数据。但是,在使用didLoad
之前不会调用该函数find
。例如:
...不会触发警报,findAll
也不会返回模型。但是,当我运行时:
该didLoad
函数将触发,可以通过 找到App.Store.findAll(App.Thing)
。
这是怎么回事?
ember.js - 我应该如何评估 Ember 的不同数据存储组件?
在过去几天的阅读中,我发现至少三个不同的扩展为 Ember 提供数据存储支持:ember-data、sproutcore-datastore、ember-ezdata,我想我可能缺少一个。
这一系列的选择引发了几个问题。
显然 ember-data 是“官方”扩展,但它也受到核心团队的资格(“这还没有准备好生产”)的严格限制。
- 我应该如何比较和评估这些选项?
- 在 SproutCore 1.x 系列中,开发通常是使用固定装置完成的,数据源是稍后连接的。这些选项中的任何一个都可以支持这种工作流程吗?我可以通过这种方式加载一些生产数据(可能会随着发布版本而改变,但用户不可编辑)以及来自后端数据源的其他数据吗?
ETA:这是一个相关的问题。
ember.js - 使用 Jasmine 进行测试时使用 EmberData 创建记录
我正在使用 Ember Data 将 Backbone 应用程序转换为 Ember 应用程序。它在浏览器中运行良好,但 Jasmine 测试用例不会通过。当我尝试在 Jasmine 测试用例中创建记录时,出现此错误:
这是错误消息指向的实际代码:
测试用例正在执行的实际代码如下所示:
任何想法将不胜感激。