Ember 尝试更新元素给出 this.get(...)。保存不是函数
Ember trying to update element gives this.get(...).save is not a function
我正在努力学习 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;
}});
您的模型似乎是一个实例数组,因为您正在遍历它。您无法保存一系列模型。相反,将当前模型传递给操作并保存特定模型:
<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
}
我有一个类似的问题,我找到了一个非常 "hacky" 的解决方案。
而不是:
model.save()
试试这个:
model.get('content').save()
这对我有用,尽管作为解决方案我并不热衷。有没有人有更清洁的解决方法来解决这个问题?
我知道这是一个老问题,但问题实际上是由 this.get('model') 返回一个承诺而不是 ember 数据模型引起的(因此为什么得到( '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());
}
}});
我正在努力学习 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;
}});
您的模型似乎是一个实例数组,因为您正在遍历它。您无法保存一系列模型。相反,将当前模型传递给操作并保存特定模型:
<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
}
我有一个类似的问题,我找到了一个非常 "hacky" 的解决方案。
而不是:
model.save()
试试这个:
model.get('content').save()
这对我有用,尽管作为解决方案我并不热衷。有没有人有更清洁的解决方法来解决这个问题?
我知道这是一个老问题,但问题实际上是由 this.get('model') 返回一个承诺而不是 ember 数据模型引起的(因此为什么得到( '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());
}
}});