Вот jsfiddle демонстрация: http://jsfiddle.net/YUHLA/5/Ember.js-Why would this.get ('model') возвращает контроллер?
Это проблема, которую я столкнулся, пытаясь выяснить правильный шаблон для создания новой записи. Я не могу получить вновь созданную запись для сохранения, и я столкнулся с каким-то странным поведением на этом пути.
Откройте консоль и попробуйте добавить новое сообщение и сохранить его. Обратите внимание на три нечетные вхождения:
- Вызова Get («модель») на контроллере возвращает контроллер на линии 62.
- В строке 65, это показано, что новые модели не были сохранены в светильники.
- После создания другого сообщения с пост-контроллера и сохранения его сохраняются обе записи (строка 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);
});
});
}
});
ли это связано с тем, что я создаю модель от контроллера сообщений, а затем сохранить его в пост управления? Если да, то как я могу обойти это?
Спасибо!
Спасибо за ответ. 'this.get ('model'). save()', по-видимому, не делает запрос 'POST' для бэкэнд ... это должно быть так? Я сделал новую скрипку, используя транзакцию, которая работает на скрипке, но в моем приложении одна и та же процедура не делает запрос «POST» на сервере. http://jsfiddle.net/YUHLA/9/ – tobobo
Ahh, оказывается, у меня были проблемы, связанные с указанием «embedded: always» в модели post для его родительской модели. Переключение на «embedded: load» позволило мне сохранить модель сообщения отдельно. Теперь мне просто нужно решить некоторые тайны, связанные с ключами, используемыми в запросах POST, и добавили ли они к ним. – tobobo
Отлично, рад, что сработал. Re: используемые ключи, лучшее место для поиска - в модульном тесте для адаптера REST. Просто посмотрите на хеш ajax, который передается для каждого типа запроса. https://github.com/emberjs/data/blob/master/packages/ember-data/tests/unit/rest_adapter_test.js –