2015-02-24 4 views
2

Мои модели работают с сервером по умолчанию Ember RESTAdapter.Пользовательский пост-запрос с RESTAdapter

Я только что создал пользовательскую конечную точку /mail на моем сервере, которая отправляет электронное письмо, если предоставляется имя, действительный адрес электронной почты и текст.

Как заставить Ember отправлять этот заказ после запроса? Возможно ли это без Ember.ajax?

ответ

6

Для меня лично я бы не использовал Ember-Data для обработки этого сценария; Обычно я использую Ember-Data для обработки моих сохраняемых моделей. Если вы попытаетесь использовать Ember-Data для других вызовов AJAX, это просто станет беспорядком. Помните, что задание Ember-Data - управлять вашими постоянными данными и одним из способов, которым это может сделать это с помощью вызовов AJAX. Это не означает, что все, что требует вызова AJAX, должно обрабатываться с помощью Ember-Data.

У меня есть эта же проблема, и я написал служебный модуль, который имеет функции для всех моих немодельных материалов AJAX. Это позволяет легко поменяться местами для тестирования. Вот небольшой пример:

// utils/ajax.js 

export function sendHelpEmail(comment) { 
    return new Promise((resolve, reject) => { 
     $.ajax({ 
      type: 'POST', 
      url: '/api/contact_us', 
      contentType: 'application/json', 
      data: JSON.stringify({ comment }), 
      processData: false, 
      statusCode: { 
       200:() => Em.run(null, resolve), 
       500:() => Em.run(null, reject) 
      } 
     }); 
    }); 
} 

Тогда, я могу сделать что-то подобное в мой контроллер:

import { sendHelpEmail} from '../utils/ajax.js'; 

export default Em.Controller.extend({ 
    actions: { 
     sendEmail() { 
      sendHelpEmail(this.get('comment')); 
     } 
    } 
}); 
+0

Есть какие-либо рекомендации/ссылки на 'Ember.run'? Документы довольно сокращены. Http://emberjs.com/api/classes/Ember.run.html – hectorh30

+1

@ hectorh30 Для API проверьте исходный код (https://github.com/ebryn/backburner.js/ блоб/ведущий/Библиотека/backburner.js # L141). Аргументы: '(target, method, args ...)'. Для понимания цикла запуска выйдите из [этого руководства] (https://github.com/ebryn/backburner.js/blob/master/lib/backburner.js#L141). – GJK

+0

Вторые ссылки указывают на код. Руководство было бы очень полезно. Большое спасибо! – hectorh30

Смежные вопросы