鉴于模型:
Blog.Post = DS.Model.extend({
title: DS.attr('string'),
tags: DS.hasMany('Blog.Tag', { embedded: true })
});
Blog.Tag = DS.Model.extend({
foo: DS.attr('string'),
bar: DS.attr('string')
});
Run Code Online (Sandbox Code Playgroud)
而实例:
var myPost = Blog.Post.createRecord({ id: 45, title: 'Foo Bar' })
Run Code Online (Sandbox Code Playgroud)
当我这样做时myPost.store.commit()(通过ember-data的DS.RESTAdapter),我的服务器返回一个应该应用的自动生成标签的列表myPost.示例响应json:
{
posts: [
{
id: 45,
title: 'Foo Bar',
tags: [
{ id: 1, foo: 'bar1' },
{ id: 2, foo: 'bar2' }
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
我希望这myPost最终会得到json返回的两个标签,但我得到了这个错误:
Error: <DS.StateManager:ember448> could not respond to event invokeLifecycleCallbacks in state rootState.loaded.updated.uncommitted.
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
编辑:澄清json以包含每个@ …
对于这些步骤:
1.通过App.router.transaction()启动Transaction
2.将Post-1和Post-2添加到事务
3.删除Post-1
4.删除Post-2
5. transaction.commit()
如何处理以下内容:
1.从服务器中删除后从视图中删除记录.
2.如果Commit失败,则回滚事务.所以记录在View中再次可见.
3.如何在视图中显示已删除的记录,因为在本地删除后,它将从集合中删除.
我希望我的Emberjs应用程序处理HTTP状态未授权(401).
该应用程序使用ember-data集成JSON API(Rails).
当接收HTTP状态未授权时,客户端层(Emberjs)应该重定向到提示登录的Emberjs视图/模板(401).
我怎样才能在整个应用程序中执行此操作?
如果我尝试用类似的内容创建记录
var myObject = App.ModelName.createRecord( data );
myObject.get("transaction").commit();
Run Code Online (Sandbox Code Playgroud)
永远不会设置myObject的ID。
这表示id生成应由EmberData处理(第一个响应)。那么应该怎么办?新ID在哪里确定。应该不应该回调API以获得有效的ID?
我需要Ember在调用REST端点时停止尝试猜测,但找不到这样做的方法.
如果我有一个端点说,/services我想要总是打电话给/services我,无论我是打电话find('services')还是打电话find('services', 1)
单面相同.
是否可以禁用此行为?即使我必须覆盖REStAdapter中的方法也没问题.
谢谢!
模型:
DS.Model.extend({
title: DS.attr('string'),
body: DS.attr('string'),
comments: DS.hasMany('comment', { async: true} ),
hasComments: Ember.computed.gt('comments.length', 0)
});
Run Code Online (Sandbox Code Playgroud)
有效载荷:
{
"id": "abcdefg",
"title": "some cats are cool",
"body": "",
"comments: ["100", "101", "102"]
}
Run Code Online (Sandbox Code Playgroud)
但是hasComments计算属性会单独触发每个注释的提取.我不希望这样:D
我知道这有效(避免了获取),但进入私有API:
hasComments: Ember.computed.gt('data.comments.length', 0)
ember.js 1.8.1
ember-data 1.0.0-beta.11
关于根据长度实现计算属性的任何其他建议
我已将Ember-data更新为1.0.0-beta.19,现在store.find('events')解决了promise返回DS.INTERNALMODEL实例,而不是DS.MODEL.使用Ember-data 1.0.0-beta.18它运行正常.有任何想法吗?
UPDATE
最后,我发现我的应用程序代码中的某个地方使用的是Ember数据内部代码store.find('events.content'),导致异常.调试器没有那么有用的跟踪它,但删除这个修复了我的问题.
因此,Ember数据模型具有在不将其提交到后端deleteRecord()的destroyRecord()情况下执行的功能。
我该怎么做save(),而不将其提交到后台?
我需要它的原因是,我正在使用自定义服务在一个请求中批量保存多个不同类型(模型)的记录。我已成功发送请求,并且记录保留在后端。
但是由于请求没有通过Ember Data管道,因此除非我手动处理,否则服务器的响应将被丢弃。
基本上,我在服务中有此功能:
// Accepts an array of records of mixed types,
// both existing and new
batchSave (records) {
this
.customAjax(records) // The records are persisted
.then(payload => { // Response from the backend with updated records
store.pushPayload(payload); // Now all records have been updated with their current state
// Now all the records are in their current state.
// But they are still dirty!
// How do I mark …Run Code Online (Sandbox Code Playgroud) 在生产ember构建中,我在加载index.html时遇到了以下错误.
未捕获错误:无法找到ember-data/-private\system\references\record从中导入的模块ember-data/-private/system/references
我相信模块名称正斜杠会导致此问题.
我在ember-cli-build.js文件中没有任何条目.在分析此错误时,我发现注册表包含以下模块,
"ember-data/-private/system/references"
"ember-data/-private/system/references/belongs-to"
"ember-data/-private/system /文献/有一对多"
但是有些如何在注册表中检查以下依赖项ember-data-private\system\references\
tneter-data-private\system\references\belongs-to
ember-data-private\system\references\has-many
导致以下缺少模块错误.任何人都帮我解决这个错误.
我有文件清单.每个文档都有belongsTo定义的客户端属性.
当用户在其中一个文档中更改客户端时,我想在计数器中显示更改了多少文档.当用户决定按"发布"按钮时,会将文档客户端更改保存到api.
ember 2.13中的DS.Model有参数(https://emberjs.com/api/data/classes/DS.Model.html):
hasDirtyAttributes,dirtyType
他们两个都没有通过Ember 设计对belongsTo/HasMany的变化作出反应.我看到了很多关于这个主题的答案,但我没有在2.13文档中看到任何isDirty()方法,也没有看到任何.send("becomeDirty")方法来手动设置脏状态的文档模型?我还看到了几个旧版Ember版本的插件/ mixins.
但我的问题是,Ember创作者如何"建议/建议/最佳实践"来解决这个问题.是否有一些基本的方法/手动解决方案,不需要任何第三方插件?对于模型中的每个关系可能都是onchangechange observer,或者对于子相关模型使用@ each.dirtyType计算属性(或者甚至设置子项不会被标记为脏本身?)?
在Ember 2.13中,什么是沙箱解决方案?