我正在评估Emberjs的背景是我们是否可以将一些代码移植到它但是保持相同的api所以我的第一天真的看着它。
我正在使用Tom Dale教程但没有使用ember-data。我想我已经找到了如何将数据导入应用程序(thx @ kingping2k)。我只需要保存/更新。
我有一个doneEditing动作,当我点击控制台看到它时会调用它,但是如何获得对模型的引用。查看控制器文档(http://emberjs.com/api/classes/Ember.Controller.html),我没有看到像model
之类的真正明显的属性。我怎么告诉PostController保存它回到路线的帖子?此外,人们通常在保存完成之后使用jQuery承诺做其他事情(我假设是)?
我已经在底部找到了相关代码和doneEditing操作,我正在寻求帮助:
thx任何帮助
Model:
Hex.Post = Ember.Object.extend({
id: null,
body: null,
isEnabled: null,
createdAt: null,
save: function(data){
console.log("you want to save this item");
$.post( "api/post", data, function( data ) {
// something here
});
}
});
View:
<script type="text/x-handlebars" id="post">
{{#if isEditing}}
{{partial 'post/edit'}}
<button {{action 'doneEditing'}}>Done</button>
{{else}}
<button {{action 'edit'}}>Edit</button>
{{/if}}
<h1>{{id}}</h1>
{{outlet}}
</script>
Route:
Hex.PostRoute = Ember.Route.extend({
model: function(params) {
console.log('called with: ' + params.post_id);
return Hex.Post.findById(params.post_id);
}
});
Controller:
Hex.PostController = Ember.ObjectController.extend({
isEditing: false,
actions:{
edit: function() {
this.set('isEditing', true);
},
doneEditing: function() {
this.set('isEditing', false);
console.log("this gets called");
//this.get('content').save();
//this.save();
//console.log("here: " + this.model.id);
//this.model.save(); //doesn't work ???
// this.post.save(); //doesn't work ???
//this.get('store').commit(); // prob no
}
}
});
答案 0 :(得分:2)
当你从模型钩子返回一个模型时,它会被传递给路径中的setupController
。 setupController
的默认实现执行此操作controller.set('model', model)
setupController:function(controller, model){
controller.set('model', model');
}
因此,要在控制器的上下文中获取模型,只需获取该属性。
var model = this.get('model')
我会回复承诺,然后你可以触发保存/失败等事情
save: function(){
console.log("you want to save this item");
return Ember.$.post( "api/post", JSON.stringify(this));
}
doneEditing: function() {
this.set('isEditing', false);
var model = this.get('model');
model.save().then(function(){alert('saved');},
function(){alert('failure');});
}
通常你会把保存放在重新开放
中Hex.Post.reopen({
save: function(){
console.log("you want to save this item");
return Ember.$.post( "api/post", JSON.stringify(this));
}
});