Ember试图更新元素给出了this.get(...)。save不是一个函数

时间:2015-02-12 00:51:31

标签: ember.js ember-data

我正在努力学习Ember,并且我已经阅读并将新元素写入我的后端服务器。在尝试更新时,我不知何故被卡住了。

这是我的控制器

App.TeamController = Ember.ObjectController.extend({
editMode : false,
actions : {
    enterEdit : function() {
        this.set('editMode', true);
    },
    saveEdit : function() {
        this.set('editMode', false);
        this.get('model').save();
    }
}});

这是我的车把代码:

    {{# each team in model itemController="team"}}
    {{# if team.editMode}}
    {{input type="text" id="newName" value=team.name class="form-control"}}
    {{input type="text" id="newLevel" value=team.level class="form-control"}}
    <button {{action "saveEdit"}}>Save</button>
    {{else}}
     <p>{{team.name}} : {{team.level}} <button {{action 'enterEdit'}}>edit</button></p>
    {{/if}}
{{/each}}

这在控制台中给出了以下错误消息:

TypeError:this.get(...)。save不是函数。

我无法弄清楚出了什么问题。任何帮助表示赞赏。

编辑:

我的模特:

App.Team = DS.Model.extend({
name: DS.attr('string'),
level: DS.attr('string')

});

我的路线

App.TeamsRoute = Ember.Route.extend({
model : function() {
    var team = $.get('/teams/');
    team.then(function(data){
        console.log(data);
    });
    return team;
}});

3 个答案:

答案 0 :(得分:2)

您的模型似乎是一个实例数组,因为您正在循环它。您无法保存模型数组。相反,将当前模型传递给操作并保存该特定模型:

<button {{action "saveEdit" team}}>  {{! pass team to action }}
    Save
</button>

然后保存该特定型号:

saveEdit : function(model) {         // <== add parameter
    this.set('editMode', false);
    model.save();                    // <== save the specific model
}

答案 1 :(得分:2)

我有一个类似的问题,我发现了一个非常&#34; hacky&#34;解决方案。

而不是:

model.get('content').save()

试试这个:

providers

这对我有用,虽然作为解决方案,我并不热衷。有没有人能更清洁地解决这个问题呢?

答案 2 :(得分:2)

我知道这是一个老问题,但问题实际上是由this.get('model')返回一个promise而不是ember数据模型(因此为什么get('content')有效)。清理它的最简单的解决方案是将代码修改为以下

App.TeamController = Ember.ObjectController.extend({
editMode : false,
actions : {
    enterEdit : function() {
        this.set('editMode', true);
    },
    saveEdit : function() {
        this.set('editMode', false);
        //this properly handles the promise that is returned 
        this.get('model').then(m => m.save());
    }
}});