Javascript 带有余烬数据的Ember.js。保存时模型对象属性未持久化到数据

Javascript 带有余烬数据的Ember.js。保存时模型对象属性未持久化到数据,javascript,ember.js,ember-data,Javascript,Ember.js,Ember Data,我试图理解余烬数据模型如何将数据从\u internalModel.\u attributes对象移动到\u internalModel.\u data对象 在我的例子中,我正在调用item.set('val',foo),其中'val'是我的项目模型定义上的一个属性,但是当我调用项目.save()时,'val'属性与调用项目.set()之前的值保持不变 通常,调用.set()然后调用.save()是不会失败的,即使我正在动态创建合成属性。有人能解释为什么它不会将值持久化到要保存的_数据对象吗 来

我试图理解余烬数据模型如何将数据从
\u internalModel.\u attributes
对象移动到
\u internalModel.\u data
对象

在我的例子中,我正在调用
item.set('val',foo)
,其中
'val'
是我的
项目
模型定义上的一个属性,但是当我调用
项目.save()
时,
'val'
属性与调用
项目.set()
之前的值保持不变

通常,调用
.set()
然后调用
.save()
是不会失败的,即使我正在动态创建合成属性。有人能解释为什么它不会将值持久化到要保存的_数据对象吗

来源 controller.js

model.js

模板.hbs


{{{#每个项目都作为|项目}
{{item.foo}
{{item.bar}
{{item.baz}}
编辑
删除
{{/每个}}
我想出来了

问题在于ember数据
DS.attr('date')
transformer。我不知道为什么它失败了,并且没有抛出错误。但是,当我使用自定义transformer
item.val
时,它被正确地推送到了我的API后端

以下是自定义转换器的代码:

import DS from 'ember-data';
import Moment from 'moment';

export default DS.Transform.extend({
  deserialize: function(value) {
    return new Moment.utc(value);
  },

  serialize: function(value) {
    return value && new Moment(value).isValid() ? value.toJSON() : null;
  }
});

你能分享代码吗?你如何测试它,你看到
val
是不变的吗?我正在使用Chrome Inspector,在调用.save()的行上有一个断点。一旦它坏了,我就在看
,它的计算结果是一个类。如果我展开
item.\u internalModel.\u属性
item.\u internalModel.\u数据
,我发现调用
.set()
后,
val
保持不变。这可以通过添加:
console.log(item.\u internalModel.\u data)来实现;日志(item.\u internalModel.\u属性).set()
后执行code>操作。当承诺得到解决时,是否确实要在调用
.save()
后进行检查?如
.save()。然后(…检查此处…
)。因为它可能还没有准备好,因为它是异步的。如果我检查网络选项卡,它会显示请求负载是用旧值
val
发送的。它在我的API后端也显示为旧值。好的,你能在调用set和save的地方共享你的模型定义代码和真正的代码片段吗?
import DS from 'ember-data';
import Ember from 'ember';
const computed = Ember.computed;
const attr = DS.attr;
const Model = DS.Model;

export default Model.extend({
  foo: attr('number'),
  bar: attr('string'),
  baz: attr('number'),
  val: attr('date')
});
<tbody>
    {{#each this as |item|}}
        <tr>
            <td>{{item.foo}}</td>
            <td>{{item.bar}}</td>
            <td>{{item.baz}}</td>
            <td>
                <button {{action 'edititem' item}}>Edit</button>
                <button {{action 'deleteitem' item}}>Delete</button>
            </td>
        </tr>
    {{/each}}
</tbody>
import DS from 'ember-data';
import Moment from 'moment';

export default DS.Transform.extend({
  deserialize: function(value) {
    return new Moment.utc(value);
  },

  serialize: function(value) {
    return value && new Moment(value).isValid() ? value.toJSON() : null;
  }
});