HasMany - принадлежит RESTAdapter Ember.js
Попытка создать имеет много принадлежит RESTAdapter. По сути, у меня есть карточка (твиттер), в которой много хэштегов. Я использую Ember-Cli.
Мои модели:
//models/card.js
import DS from 'ember-data';
export default DS.Model.extend({
handle: DS.attr('string'),
bio: DS.attr('string'),
avatar: DS.attr('string'),
hashtags: DS.hasMany('hashtag')
});
//models/hashtag.js
import DS from 'ember-data';
export default DS.Model.extend({
title: DS.attr('string'),
print: DS.attr('boolean'),
card: DS.belongsTo('card')
});
Маршрут моей карты
import Ember from 'ember';
export default Ember.Route.extend({
model: function(){
return this.store.createRecord('card');
},
actions: {
submitHandle: function () {
var card = (this.currentModel);
var store = this.store;
var hashtag = store.createRecord('hashtag');
card.set("bio", "testbio");
card.set("avatar", "twitter.com/129012931/img_original.jpg");
hashtag.set("title", "EmberJS");
hashtag.set("print", false);
hashtag.set("card", card);
card.get('hashtags').addObject(hashtag);
card.save();
}
}
});
В моем маршруте, когда пользователь вводит имя в твиттере, я создаю фиктивную карту и хэштег. Я добавляю хэштегом к хэштегам карт. До сего момента все работает отлично. Если я не вызываю card.save(), карта и хэштег связаны, как и ожидалось. Когда я звоню.save (), запрос отправляется:
card: {handle: "@testing123", bio: "testbio", avatar: "twitter.com/129012931/img_original.jpg"}
Нет упоминания о хэштеге.
Я использую паруса для серверной части, которая, кажется, сохраняет все, что указано в запросе.
Если я попробую что-то вроде: hashtag.save(). Then(function () { card.save() });
Что я и попробовал, потому что подумал, что мне может понадобиться идентификатор с сервера для хэштега, прежде чем Эмбер сможет связать его с картой. Запрос хештега выглядит следующим образом:
{"hashtag":{"title":"EmberJS","print":false,"card":null}}
И запрос карты:
{"card":{"handle":"@wiolsid","bio":"testbio","avatar":"twitter.com/129012931/img_original.jpg"}}
1 ответ
Пара соображений новичка.
Попробуйте создать хэштегом вот так:
var hashtag = store.createRecord('hashtag', {card: card});
Тогда вам не нужно
card.get('hashtags').addObject(hashtag);
,Сохраните дочернюю модель перед сохранением родительской модели.
Вот скрипка, которую я создал, чтобы попробовать подобную задачу:
- Просто: http://jsbin.com/kiligi/2/edit?html,js,output
- Абстрагироваться в миксин: http://jsbin.com/rufogo/1/edit?html,css,js,output