- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编辑 11/16/14:版本信息
DEBUG: Ember : 1.7.0 ember-1.7.0.js:14463
DEBUG: Ember Data : 1.0.0-beta.10+canary.30d6bf849b ember-1.7.0.js:14463
DEBUG: Handlebars : 1.1.2 ember-1.7.0.js:14463
DEBUG: jQuery : 1.10.2
我正在用头撞墙试图做一些我认为应该相当直接使用 ember 和 ember-data 的事情,但到目前为止我还没有运气。
本质上,我想使用服务器数据来填充 <select>
下拉式菜单。提交表单时,应根据用户选择的数据创建模型。然后将模型与 ember 数据一起保存,并以以下格式转发到服务器:
{
"File": {
"fileName":"the_name.txt",
"filePath":"/the/path",
"typeId": 13,
"versionId": 2
}
}
问题是,当模型关系被定义为异步时,typeId 和 versionId 被遗漏了,如下所示:
App.File = DS.Model.extend({
type: DS.belongsTo('type', {async: true}),
version: DS.belongsTo('version', {async: true}),
fileName: DS.attr('string'),
filePath: DS.attr('string')
});
让我困惑的部分,也可能是我的错误所在,是 Controller :
App.FilesNewController = Ember.ObjectController.extend({
needs: ['files'],
uploadError: false,
// These properties will be given by the binding in the view to the
//<select> inputs.
selectedType: null,
selectedVersion: null,
files: Ember.computed.alias('controllers.files'),
actions: {
createFile: function() {
this.createFileHelper();
}
},
createFileHelper: function() {
var selectedType = this.get('selectedType');
var selectedVersion = this.get('selectedVersion');
var file = this.store.createRecord('file', {
fileName: 'the_name.txt',
filePath: '/the/path'
});
var gotDependencies = function(values) {
//////////////////////////////////////
// This only works when async: false
file.set('type', values[0])
.set('version', values[1]);
//////////////////////////////////////
var onSuccess = function() {
this.transitionToRoute('files');
}.bind(this);
var onFail = function() {
this.set('uploadError', true);
}.bind(this);
file.save().then(onSuccess, onFail);
}.bind(this);
Ember.RSVP.all([
selectedType,
selectedVersion
]).then(gotDependencies);
}
});
当 async 设置为 false 时,ember 处理 createRecord().save()
POST 请求正确。
当异步为真时,ember 可以完美地处理多个请求的 GET 请求,但不会在 createRecord().save()
期间将 belongsTo 关系添加到文件 JSON。 .只有基本属性被序列化:
{"File":{"fileName":"the_name.txt","filePath":"/the/path"}}
我知道这个问题以前有人问过,但到目前为止我还没有找到满意的答案,也没有找到适合我需要的东西。那么,如何让 belongsTo 关系正确序列化?
为了确保一切都在这里,我将添加到目前为止的自定义序列化:
App.ApplicationSerializer = DS.RESTSerializer.extend({
serializeIntoHash: function(data, type, record, options) {
var root = Ember.String.capitalize(type.typeKey);
data[root] = this.serialize(record, options);
},
keyForRelationship: function(key, type){
if (type === 'belongsTo') {
key += "Id";
}
if (type === 'hasMany') {
key += "Ids";
}
return key;
}
});
App.FileSerializer = App.ApplicationSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs: {
type: { serialize: 'id' },
version: { serialize: 'id' }
}
});
还有一个选择:
{{ view Ember.Select
contentBinding="controller.files.versions"
optionValuePath="content"
optionLabelPath="content.versionStr"
valueBinding="controller.selectedVersion"
id="selectVersion"
classNames="form-control"
prompt="-- Select Version --"}}
如有必要,我将附加其他路由和 Controller (FilesRoute、FilesController、VersionsRoute、TypesRoute)
编辑 2014 年 11 月 16 日
我根据两个相关线程中的信息找到了一个可行的解决方案(hack?):
1) How should async belongsTo relationships be serialized?
2) Does async belongsTo support related model assignment?
基本上,我所要做的就是移动 Ember.RSVP.all()
在get()
之后关于属性:
createFileHelper: function() {
var selectedType = this.get('selectedType');
var selectedVersion = this.get('selectedVersion');
var file = this.store.createRecord('file', {
fileName: 'the_name.txt',
filePath: '/the/path',
type: null,
version: null
});
file.set('type', values[0])
.set('version', values[1]);
Ember.RSVP.all([
file.get('type'),
file.get('version')
]).then(function(values) {
var onSuccess = function() {
this.transitionToRoute('files');
}.bind(this);
var onFail = function() {
alert("failure");
this.set('uploadError', true);
}.bind(this);
file.save().then(onSuccess, onFail);
}.bind(this));
}
所以我需要 get()
在我保存模型之前属于 belongsTo 关系的属性。我不知道这是否是一个错误。也许对 emberjs 有更多了解的人可以帮助阐明这一点。
最佳答案
有关更多详细信息,请参阅问题,但我在保存具有 belongsTo 关系的模型时为我工作的通用答案(并且您特别需要将该关系序列化)是调用 .get()
上的属性,然后 save()
它们在 then()
中。
归结为:
var file = this.store.createRecord('file', {
fileName: 'the_name.txt',
filePath: '/the/path',
type: null,
version: null
});
// belongsTo set() here
file.set('type', selectedType)
.set('version', selectedVersion);
Ember.RSVP.all([
file.get('type'),
file.get('version')
]).then(function(values) {
var onSuccess = function() {
this.transitionToRoute('files');
}.bind(this);
var onFail = function() {
alert("failure");
this.set('uploadError', true);
}.bind(this);
// Save inside then() after I call get() on promises
file.save().then(onSuccess, onFail);
}.bind(this));
关于javascript - createRecord() save() 序列化中省略了 Ember Data belongsTo 异步关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26940363/
我使用 Ember 应用程序创建了一个模型,并且尝试向该模型添加一条记录,但我不断收到一条错误消息,指出 undefind 不是函数。 window.Aplus = Ember.Application
我想知道为什么每次我尝试保存新创建的记录时都会得到一个空实例,但失败了。仅当我显示错误时,我才看到在我的帖子对象中添加了一条空记录。我还尝试对帖子进行排序,这让我可以看到最近创建的帖子,但行为有点奇怪
我有以下功能: this.store.createRecord('user', params).save().then(()=>{ this.set('responseModal'
截至本文,我正在使用最新的 ember 和 ember-data。我的设置包括 django、django-rest-framework。我的适配器是 ember-data-django-rest-a
我刚刚开始使用 Ember.js,并且想要实现一个非常简单的流程。 在概述屏幕上,我有一个新按钮,允许用户添加记录。保存后,用户将返回到概览屏幕,在概览中他会看到新创建的记录。 用户使用 linkTo
我尝试存储具有belongsTo 关联的记录,但关联的ID 始终为空: 客户模型 Docket.Customer = DS.Model.extend({ name: DS.attr(
通过 PJSIP 库站点中提供的 pygui 代码后,我修改了示例如下。我有两个问题 在每个回调函数中,最后我需要添加一个虚拟的 raise 异常,否则它会出错。例如,如果我评论 onIncoming
我想知道是否有人可以指出正确的方向并帮助我修复我在使用 Firebases createUser 方法创建用户后尝试使用我的 Ember.js 模型添加用户时遇到的错误。 这里更具体的是我得到的错误:
我正在我的插件中创建一个表单,它将保存存储中的记录,并且还会通过 post api 调用将 JSON 对象发送到 Rails 后端。 我的问题是“createRecord”方法不会被适配器内的自定义方
我尝试以多种不同的方式编写此代码,但它返回此错误: Uncaught TypeError: Cannot read property 'createRecord' of undefined App.S
我想知道为什么在使用 findQuery 获取数据时,我的模板在 createRecord 之后没有得到更新。 当更改此 return this.store.findQuery('timetracki
尝试使用 Xrm.WebApi 创建自定义实体记录. 从数组负载创建批量记录时如何处理计时问题?我的所有 org_orgtrigger 自定义实体均已创建,但我的 org_orgtask 实体均未创建
Emsters! 我想弄清楚为什么在我创建新记录并将其保存到商店后我的模型没有刷新。 我的路线按如下方式计算模型: model: function (params) { var postID =
您好,我正在尝试使用 emberjs + ember-data + Rest 适配器创建一个数据。 它在保存数据时起作用,但在我使用的模板中,如果您已经传入路线,则在这种情况下您可能会重定向回“组”列
看来 store在我的 Ember 测试中不可用,无论是在 ObjectController 的上下文中。或在任何单元测试中。我的单元测试: `import {test, moduleFor} fro
如果我尝试用类似的东西创建记录 var myObject = App.ModelName.createRecord( data ); myObject.get("transaction").commi
我想创建一个新的站点记录。该模型如下所示: var SiteModel = DS.Model.extend({ name: attr(), ... languages: DS.
我正在尝试设置 Ember 数据调用来创建一个注册对象,该对象仅包含一封电子邮件,仅包含其他内容。我的 Ember Data 设置有些奇怪,因为参数似乎已传递,但 Rails 无法接收它们。不确定出了
我正在为 Web 应用程序使用 Ember 数据,在我尝试使用“createRecord”保存一些新数据之前,一切都运行得非常顺利。 这是代码的要点: App.Store = DS.Store.ext
编辑 11/16/14:版本信息 DEBUG: Ember : 1.7.0 ember-1.7.0.js:14463 DEBUG: Ember Data : 1.0.0-beta.10+ca
我是一名优秀的程序员,十分优秀!