#javascript #json #model-view-controller #ember.js
#javascript #json #модель-представление-контроллер #ember.js
Вопрос:
Я пытаюсь работать с Ember.js
Могу ли я предоставить свою модель данных в формате JSON через маршрут или контроллер?
У меня есть такой объект, сохраненный в хранилище:
this.store.createRecord('Person', {
id: 1,
name: this.get('name'),
email: this.get('email')
});
Я хочу предоставить эти данные из маршрута или контроллера как объект JSON. Я не хочу использовать какое-либо представление.
Возможно ли это сделать? Спасибо за помощь!
РЕДАКТИРОВАТЬ мой маршрут:
App.ResultRoute = Ember.Route.extend({
model: function() {
return this.store.find('person', 1);
}
});
Существует ‘1’, потому что мне нужна только эта запись.
Таким образом, это работает, и я вижу в представлении {{name}} и {{email} объекта Person.
Я хочу видеть только JSON, я пытался сделать так, как вы мне предлагаете :
App.ResultRoute = Ember.Route.extend({
afterModel: function (model) {
model.get('content').forEach(function (item) {
console.log(item.get('content'));
});
}
});
Но я получаю эту ошибку:
Ошибка неперехваченной: ошибка утверждения: Ошибка: было передано больше объектов контекста, чем динамических сегментов для маршрута: ошибка
В чем моя ошибка?
Ответ №1:
Способ, которым я бы это сделал, заключался в том, что в моей модели у меня был бы api, который возвращал бы простой объект json тому, кто его запрашивал. Таким Person
образом, модель будет иметь getPersonDetails
метод, который будет скрывать все внутренние детали, включая атрибуты, ассоциации и все остальное, и возвращать состояние person
объекта, на который он вызывается. Так, например, если вы хотите отобразить таблицу лиц или что-то в этом роде, вы должны выполнить createRecord и просто запросить у вновь созданного person
объекта его детали.
Ответ №2:
Начните с начала этого руководства. http://emberjs.com/guides/routing/specifying-a-routes-model/Он покажет вам, как указать модель для маршрута.
Затем прочитайте все это руководство по контроллерам: http://emberjs.com/guides/controllers /
В общем, вы могли бы получить доступ к этим данным из model
перехвата маршрута с помощью:
this.store.find('person') // All records
Если вы хотите получить доступ к этому первому объекту как JSON, вы могли бы сделать:
var person_JSON = this.store.find('person').then(function (persons) {
//The persons records are now available so you can do whatever you want with them
console.log(persons.objectAt(0).get('content'));
});
Вы также можете перебирать все записи и удалять содержимое для создания необработанного json без переноса Ember… Просто зависит от того, что вам действительно нужно сделать.
Однако на самом деле лучшим местом для этого был afterModel
бы хук маршрута. Вы бы не работали с обещанием, так как Ember справился бы с этим за вас:
afterModel: function (model) {
model.get('content').forEach(function (item) {
console.log(item.get('content'));
});
}
Надеюсь, это поможет.
Редактировать: поскольку у вас есть одна запись, попробуйте это:
afterModel: function (model) {
console.log(model.get('content'));
}
Комментарии:
1. Не работает, всегда одна и та же ошибка. Я сомневаюсь, может ли Ember предоставлять модель данных в формате JSON? У меня есть эта запись (имя пользователя и почта), и я хочу, чтобы этот маршрут «результат» возвращал этот объект как JSON. Могу ли я это сделать??