Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 试图更新元素的余烬给出了这个.get(…)。save不是一个函数_Ember.js_Ember Data - Fatal编程技术网

Ember.js 试图更新元素的余烬给出了这个.get(…)。save不是一个函数

Ember.js 试图更新元素的余烬给出了这个.get(…)。save不是一个函数,ember.js,ember-data,Ember.js,Ember Data,我正在努力学习余烬,并且我已经能够在我的后端服务器上读写新元素。我在尝试更新时不知怎么被卡住了 这是我的控制器 App.TeamController = Ember.ObjectController.extend({ editMode : false, actions : { enterEdit : function() { this.set('editMode', true); }, saveEdit : function() { thi

我正在努力学习余烬,并且我已经能够在我的后端服务器上读写新元素。我在尝试更新时不知怎么被卡住了

这是我的控制器

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}}
}))

我的路线

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

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

<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
}

saveEdit:function(model){/我有一个类似的问题,我发现了一个非常“黑客”的解决方案

而不是:

model.save()
试试这个:

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

这对我来说很有效,但作为一个解决方案,我并不热衷。有人对此问题有更清晰的解决方法吗?

我知道这是一个老问题,但问题实际上是由这个问题引起的。get('model')返回一个承诺,而不是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());
    }
}});

当您在
this.get('model').save();
上设置断点并运行
this.get('model')
时会发生什么情况?是否返回了一个模型?就像Oren建议的那样,很可能您没有模型,您的路由是什么样子的?如果我设置断点,我会得到一个对象,它具有与模型相同的所有值,它是:object{id:2,name:Getter,level:Getter,还有2个…},但它仍然给了我。save()不是一个函数。我的路由看起来像:App.TeamsRoute=Ember.route.extend({model:function(){var team=$.get('/teams/');team.then(函数(数据){console.log(data);});return team;});这给了我与上面描述的完全相同的对象,它有Id、名称和级别,但save不是该对象的函数。model是否是数组,如果是,是什么数组,如何创建?我试图做的是重新创建类似于这里示例的东西:首先是一个模型数组,然后将一个和一个传递给处理一个对象。我不知道它是否有效,代码早就不存在了,我转而做出反应:)是的,我没想到你会这么做。我只是把这个留给了其他偶然发现它的人。
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());
    }
}});