Я видел, как этот вопрос обсуждался, но у меня все еще возникают проблемы с манипулированием Монгосом _id
в id
. Я использую mongoose как свой ORM, и хотя у него есть виртуальные машины, я не могу заставить его работать правильно. Ниже приводится то, что у меня есть в моей модели мангуста.Ember, Ember Data и MongoDB's _id
Попытка исправить От Backend
mongoose = require 'mongoose'
Schema = mongoose.Schema
ObjectId = Schema.ObjectId
ApartmentSchema = new Schema
body: String
date: { type: Date, default: Date.now }
deleted: {type: Boolean, default: false}
saved: {type: Boolean, default: false}
visited: {type: Boolean, default: false}
email: String
phoneNumber: String
href: String
ApartmentSchema.virtual('id').get -> return @_id
module.exports = mongoose.model 'Apartment', ApartmentSchema
Когда я создаю новый экземпляр этой модели в экспрессе я могу сделать посмотреть, как apt.id
и получить идентификатор обратно, но когда я отправить ответ вниз для клиента, у меня просто есть _id
, а не id
.
Второе решение, которое я пробовал, состояло в том, чтобы создать рассчитанное свойство для id
, но по какой-либо причине ember это не нравится. Здесь есть две проблемы. Эмбер не уважает вычисленное свойство id
или, по крайней мере, не больше. Это то, на что похожа моя модель данных ember-данных.
Попытка исправить его из Frontend
App.Apartment = DS.Model.extend({
body: DS.attr('string'),
date: DS.attr('date'),
deleted: DS.attr('boolean'),
saved: DS.attr('boolean'),
visited: DS.attr('boolean'),
email: DS.attr('string'),
phone: DS.attr('string'),
_id: DS.attr('string'),
id : function() {
return this.get('_id')
}.property('_id')
});
В шаблоне ниже, ничего не делает для идентификатора.
{{#each apartment in controller}}
<li>{{apartment.body}} | {{apartment.date}} | {{apartment.href}} {{apartment.id}}</a> {{#linkTo 'apartment' apartment }} View {{/linkTo}} </li>
{{/each}}
В linkTo
помощники работают, но URL имеет нулевой где идентификатор должен быть. Это приводит к разрыву подкладки и загрузке данных несколько раз. Ниже мой маршрутизатор для некоторого контекста.
App.Router.map(function(){
this.resource('apartments', function(){
this.resource('apartment', { path: ':apartment_id' });
});
});
Изменение имени моего вычисленной id
собственности на что-то вроде foo
, а затем изменить мой маршрутизатор path: ':apartment_foo'
результатов в адресах, которые имеют ссылки на объект в URL-адрес, например: #/apartments/<App.Apartment:ember357:null>
.
Это похоже на то, что меня беспокоит эмбер. Любая помощь будет оценена по достоинству.
Для меня это изменяет «нулевую» часть маршрута на «объект объекта», поскольку идентификатор объекта BSON сериализуется как объект (например, '' _id ": {" $ oid ":" 5147130ffddd310aeb000001 "}') , Было ли исправление в исходном вопросе, который превращает это в строку? –