这是一个 jsfiddle 演示:http: //jsfiddle.net/YUHLA/5/
这是我在尝试找出创建新记录的正确模式时遇到的问题。我无法保存新创建的记录,并且在途中遇到了一些奇怪的行为。
打开控制台,然后尝试添加新帖子并保存。注意三个奇怪的事件:
- 在控制器上调用 get('model') 会在第 62 行返回一个控制器。
- 在第 65 行,证明没有新模型保存到固定装置中。
- 从 post 控制器创建另一个帖子并保存后,两个帖子都被保存(第 70 行)。
这是javascript:
window.App = Ember.Application.create();
App.Store = DS.Store.extend({
adapter: DS.FixtureAdapter
});
App.store = App.Store.create();
App.Post = DS.Model.extend({
title: DS.attr('string'),
body: DS.attr('string')
});
App.Post.FIXTURES = [
{
id: 1,
title: 'title',
body: 'body'
}, {
id: 2,
title: 'title two',
body: 'body two'
}
];
App.NewPostFormView = Ember.View.extend({
tagName: "form",
templateName: "newPostForm",
submit: function() {
this.get('controller').save();
return false;
}
});
App.ApplicationController = Ember.ObjectController.extend({
posts: (function() {
return App.Post.find();
}).property()
});
App.PostsController = Ember.ArrayController.extend({
sortProperties: ['id'],
sortAscending: false,
itemController: 'post',
newPost: function() {
var post;
return post = App.Post.createRecord({
title: '',
body: '',
isEditing: true
});
}
});
App.PostController = Ember.ObjectController.extend({
save: function() {
var temp;
console.log('Starting to save');
console.log('this.get(\'model\') =', this.get('model'));
transaction = App.store.transaction();
this.set('isEditing', false);
temp = this.get('model');
temp.get('store').commit();
Ember.run.next(function(){
console.log('# fixtures:', App.Post.FIXTURES.length);
App.Post.createRecord(
{title: 'post four', body: 'four body'}
).get('store').commit()
Ember.run.next(function(){
console.log('# fixtures:', App.Post.FIXTURES.length);
});
});
}
});
这是否与我从 post 控制器创建模型,然后将其保存在 post 控制器中的事实有关?如果是这样,我该如何解决这个问题?
谢谢!