Ember.js 如何让ember保留编辑的模型更改以跨管线保存?
我有一个fiddle()和一个简单的编辑保存应用程序:Ember.js 如何让ember保留编辑的模型更改以跨管线保存?,ember.js,ember-data,Ember.js,Ember Data,我有一个fiddle()和一个简单的编辑保存应用程序: <script type="text/x-handlebars"> {{outlet}} </script> <script type="text/x-handlebars" id="profile/edit"> Edit. <form {{action 'save' on="submit"}}> <div> <
<script type="text/x-handlebars">
{{outlet}}
</script>
<script type="text/x-handlebars" id="profile/edit">
Edit.
<form {{action 'save' on="submit"}}>
<div>
<input type="email" {{bind-attr value="email"}}>
</div>
<button>Save</button>
</form>
</script>
<script type="text/x-handlebars" id="profile/index">
{{#link-to 'profile.edit'}}Edit{{/link-to}}
{{email}}
</script>
window.App = Ember.Application.create();
App.ApplicationAdapter = DS.FixtureAdapter.extend();
App.Router.map(function () {
this.resource('profile', {path: '/'}, function(){
this.route('edit');
});
});
App.ProfileRoute = Ember.Route.extend({
model: function() {
return this.store.find('user').then(function(users){
return users.get('firstObject');
});
}
});
App.ProfileEditRoute = App.ProfileRoute;
App.ProfileEditController = Ember.ObjectController.extend({
actions: {
save: function(){
var profile = this.get('model');
profile.setProperties({email: this.get('email')});
profile.save();
this.transitionTo('profile');
}
}
});
App.User = DS.Model.extend({
email: DS.attr('string')
});
App.User.FIXTURES = [
{
id: 1,
email: 'herpyderp@gmail.com'
}
];
当我点击save并返回到profile/index
时,它没有更新的模型,当我返回到profile/edit
时,编辑不在那里。我意识到我可以使用{{input value=email}}
,它似乎记住了模型的更改,但似乎在我键入时保留了对模型的更改,这不是我想要的
我遗漏了什么?save方法返回一个承诺,当承诺被解析为:
var route = this;
profile.save().then(function() {
route.transitionTo('profile');
}, function() {
// TODO: implement error logic
});
在这种情况下,当应用程序返回到索引状态时,您的方法将被更新。我对其进行了2次更改。首先,因为我抓取的是
this.get('email')
我得到的是模型的电子邮件地址,而不是输入字段中的地址,所以它实际上从未更新数据
<script type="text/x-handlebars">
{{outlet}}
</script>
<script type="text/x-handlebars" id="profile/edit">
Edit.
<form {{action 'save' on="submit"}}>
<div>
{{input value=email}}
</div>
<button>Save</button>
</form>
{{#link-to 'profile'}}Back{{/link-to}}
</script>
<script type="text/x-handlebars" id="profile/index">
{{#link-to 'profile.edit'}}Edit{{/link-to}}
{{email}}
</script>
更新小提琴:
window.App = Ember.Application.create();
App.ApplicationAdapter = DS.FixtureAdapter.extend();
App.Router.map(function () {
this.resource('profile', {path: '/'}, function(){
this.route('edit');
});
});
App.ProfileRoute = Ember.Route.extend({
model: function() {
return this.store.find('user').then(function(users){
return users.get('firstObject');
});
}
});
App.ProfileEditRoute = App.ProfileRoute.extend({
deactivate: function(){
var model = this.modelFor('profile');
if(model.get('isDirty') && !model.get('isSaving')){
model.rollback();
}
},
actions: {
save: function(){
this.modelFor('profile').save();
this.transitionTo('profile');
}
}
});
App.User = DS.Model.extend({
email: DS.attr('string')
});
App.User.FIXTURES = [
{
id: 1,
email: 'herpyderp@gmail.com'
}
];