Ember.js 如何在使用store.createRecord手动创建新记录时应用自定义转换

Ember.js 如何在使用store.createRecord手动创建新记录时应用自定义转换,ember.js,ember-data,Ember.js,Ember Data,我有一个使用自定义变换的模型,如: App.Question = DS.Model.extend({ questionName: DS.attr('string'), attributes: DS.attr('myCustomTransform') }); 现在我想创建一个问题记录,如: var newQuestion = store.createRecord('question', {"questionName":"abc", "attributes":{....}}

我有一个使用自定义变换的模型,如:

App.Question = DS.Model.extend({
    questionName: DS.attr('string'),
    attributes: DS.attr('myCustomTransform')    
});
现在我想创建一个问题记录,如:

var newQuestion = store.createRecord('question', {"questionName":"abc", "attributes":{....}});
它创建一个记录,但不将自定义转换应用于加载的记录(或属性)。知道我如何在手动创建记录时应用转换吗

谢谢, 迪伊

*更新:工作解决方案*

我的模型如下所示:

AS.Question = DS.Model.extend({
    questionName: DS.attr('string'),
    answers: DS.hasMany('answer'),
    childQuestions: DS.hasMany('question', {async:true})
});
$.ajax({
            url: "questions",
            data: {"templateId": templateQuestionId, "parentQuestionId": someId},
            dataType: "json",
            type: "POST"
        }).done(function (data) {


          /*
          data looks something like
{"questions":[
      {"id":122,
      "questionName":"some question name",
      "attributes": {"pinned":false,"randomized":false},
      "answers":[1,2],
      "childQuestions":[]
      }]
,"answers":[
      {"id":1,"answerText":"some text"}
     ,{"id":2,"answerText":"some text"}
  ]}
   */
                store.pushPayload('question', data);
                var questionId = data.question.id;
                store.find('question', questionId).then(function(question){
                    parent.get('childQuestions').pushObject(question);
                });
                self.send('toggleBody');
            });
添加逻辑如下所示:

AS.Question = DS.Model.extend({
    questionName: DS.attr('string'),
    answers: DS.hasMany('answer'),
    childQuestions: DS.hasMany('question', {async:true})
});
$.ajax({
            url: "questions",
            data: {"templateId": templateQuestionId, "parentQuestionId": someId},
            dataType: "json",
            type: "POST"
        }).done(function (data) {


          /*
          data looks something like
{"questions":[
      {"id":122,
      "questionName":"some question name",
      "attributes": {"pinned":false,"randomized":false},
      "answers":[1,2],
      "childQuestions":[]
      }]
,"answers":[
      {"id":1,"answerText":"some text"}
     ,{"id":2,"answerText":"some text"}
  ]}
   */
                store.pushPayload('question', data);
                var questionId = data.question.id;
                store.find('question', questionId).then(function(question){
                    parent.get('childQuestions').pushObject(question);
                });
                self.send('toggleBody');
            });

转换是在向服务器传输和从服务器传输期间应用的,而不是在获取/设置期间。

因此,我们无法将转换应用于我们提供给ember的json数据(可能数据不是来自服务器,而是手动提供的)?不是在创建期间,ember数据假定您在那个时候完全控制了代码,并且可以根据需要对其进行操作。忽略我之前关于使用二传手的咆哮,我错过了你正在做的事情。为什么你需要反序列化obj?这有点像。我基于模板创建了一个新的问题记录,但模板本身并不是问题模型的一部分。例如:我将创建一个新的问题,其POST request to/question?template_id=1。该请求将在db中创建一个新问题,然后以正确的Ember格式返回json数据。我想利用这些数据并在客户端附加一条记录。这样做时,属性数据似乎是普通的json对象,而不是反序列化的Ember.ObjectI确实意识到,其他简单的方法是向store请求新的问题模型数据(因为我已经从之前的POST请求中获得了问题id)。但这会让我付出另一个ajax请求的代价,我宁愿不这样做。如果我可以用一个请求来完成事情,那么我宁愿坚持下去。pushpayload有点不稳定,我上一次看到的时候,它们都需要是复数键,所以问题而不是问题,我会在“完成”中更改它