当我在Ember-Data中的新记录上调用save()时,记录未添加到模型中

时间:2013-07-08 03:05:43

标签: ember.js ember-data

使用Ember-Data 0.13-59& Ember 1.0.0 RC 6(来自入门套件)

问题:save()之后从App.Userstat.createRecord({ ... })获取的新记录服务器获取POST并成功返回id但新的记录在Userstat模型中不可用。

为了更好地理解示例:这是一个测验应用程序(用于多项选择题)。每个问题都有几个选择,当用户选择一个选项时,他们对相应问题的选择存储在模型App.Userstat中。

在每个问题中,应用都需要知道用户是否已经回答了这个问题,或者是否是新问题。

我将计算属性用作settergetter。当用户选择一个选项时(该选项的值传递给computed属性),将调用setter。首先,它检查用户当前问题是否存在记录。如果它不存在,它将创建一个新记录。如果确实存在,则应仅发出包含更新内容的PUT请求。

代码已更新(7月8日上午11点)

App.UserstatsController = Ember.ArrayController.extend();

App.QuestionController = Ember.ObjectController.extend({
  needs: "userstats",

  chosen = function(key, value) {
    // getter
    if(value === undefined) {

       // something goes here

    // setter
    } else {

      // the question.id is used to compare for an existing record in Userstat mdoel
      var questionId = this.get('id');
      var questionModel = this.get('model');

      // does any Userstat record belong to the current question??
      var stats = this.get('controllers.Userstats');
      var stat = stats.get('model').findProperty('question.id', questionId);

      // if no record exists for stat, means user has not answered this question yet...
      if(!stat) {

        newStat = App.Userstat.createRecord({
          "question" : questionModel,
          "choice" : value       // value passed to the computed property
        )}

        newStat.save();                     // I've tried this
        // newStat.get('store').commit();   // and this
        return value;

      // if there is a record(stat) then we will just update the user's choice
      } else {
        stat.set('choice', value);
        stat.get('store').commit();
        return value;
    }
  }.property('controllers.Userstats')

无论我设置chosen多少次,它总是发送POST(而不是仅发送PUT请求的更新),因为它从未在第一次将记录添加到模型中。 / p>

为了进一步说明,在计算属性的setter部分,当我输入此代码时:

var stats = this.get('controllers.Userstats')
console.log stats 

Userstats控制器显示所有以前存在的记录,但不显示新提交的记录!

在我save()commit()之后新记录怎么没有?

谢谢:)

修改

也许它与我在单一模型App.Userstat中添加记录有关,然后当我查找它时,我正在使用UserstatsController进行搜索,这是一个数组控制器???

1 个答案:

答案 0 :(得分:1)

我不知道这是不是一个拼写错误,但计算属性定义错误,应该是这样的:

App.QuestionController = Ember.ObjectController.extend({
  needs: 'userstats',
  choice: 'controllers.userstats.choice',
  chosen: function(key, value) {
    ...
  }.property('choice')
  ...
});

property()内,您还应该定义在计算属性发生变化时触发计算属性的属性。这样,如果choice发生更改,则会触发chosen cp。

如果有帮助,请告诉我。