#javascript #ember.js
#javascript #ember.js
Вопрос:
итак, я пытаюсь получить доступ к хранилищу с контроллера следующим образом:
import Ember from 'ember';
export default Ember.Controller.extend({
emailAddress: '',
message: '',
isValidEmail: Ember.computed.match('emailAddress', /^. @. .. $/),
isMessageLongEnough: Ember.computed.gte('message.length', 10),
isValid: Ember.computed.and('isValidEmail', 'isMessageLongEnough'),
isNotValid: Ember.computed.not('isValid'),
actions: {
sendConfirmation() {
this.store.createRecord('contact', {
email: emailAddress,
message: message,
}).save();
this.set('responseMessage', 'We got your message and we will be in contact soon :)');
this.set('emailAddress', '');
this.set('message', '');
}
}
});
Я просмотрел документацию для Ember.js 2.7 и в нем конкретно не указано, где можно получить доступ к хранилищу, но я знаю, что к нему можно получить доступ через контроллер или маршрут.
Однако выполнение этого способа приводит к следующим ошибкам:
controllers/contact.js: line 17, col 16, 'emailAddress' is not defined.
controllers/contact.js: line 18, col 18, 'message' is not defined.
Я не уверен, так ли я обращаюсь к контроллеру или так, как я определил адрес электронной почты и сообщение.
Пожалуйста, помогите и спасибо!
РЕШАЕМАЯ: для этой части:
sendConfirmation() {
this.store.createRecord('contact', {
email: emailAddress,
message: message,
}).save();
Это должно было быть так:
sendConfirmation() {
this.store.createRecord('contact', {
email: this.get('emailAddress'),
message: this.get('message'),
}).save();
🙂
Ответ №1:
Ваша проблема не в том, как вы получаете доступ к хранилищу, а в том, что вы пытаетесь добавить контакт с электронной почтой и сообщением, фактически не определяя переменные.
sendConfirmation() {
this.store.createRecord('contact', {
// what do you expect emailAddress and message values to be at this point?
email: emailAddress, // <-- emailAddress is not defined
message: message, // <-- message is not defined
}).save();
// ...
Возможно, вы хотели сначала получить их?
sendConfirmation() {
// retrieve emailAddress and message first
const {
emailAddress,
message
} = this.getProperties('emailAddress', 'message');
// then use them to create a contact
this.store.createRecord('contact', {
email: emailAddress
message: message
}).save();
// ...
Еще одна вещь, доступ к хранилищу, вероятно, следует осуществлять с помощью this.get('store')
, поскольку использование геттеров / сеттеров — это способ доступа к свойствам ember / управления ими.
Ответ №2:
По умолчанию store
будет введено в controller
и route
. и еще одна вещь, через которую вы должны получить свойства get
sendConfirmation() {
var newRecordObj = {};
newRecordObj['email'] = this.get('emailAddress');
newRecordObj['message'] = this.get('message');
this.get('store').createRecord('contact', newRecordObj).save((result) => {
//success handling
this.set('responseMessage', 'We got your message and we will be in contact soon :)');
this.set('emailAddress', '');
this.set('message', '');
}, () => {
//error handling
this.set('responseMessage', 'Error message');
});
}