2016-07-02 5 views
1

Когда я отправкой формы, я получаю следующий ответ:Ember данных не отправляет данные на отправить

{"data":{"attributes":{"title":null,"description":null},"type":"cards"}}

Я не знаю, почему я получаю title и description как нуль.

routes/cards/new.js:

actions: { 
    save() { 
    const newCard = this.get('store').createRecord('card', this.get('model')); 
    newCard.save().then((card) => { 
     this.transitionTo('cards.all'); 
    }); 
    }, 
    cancel() { 
    this.transitionTo('cards'); 
    } 
} 

templates/cards/new.hbs:

<form> 
    <div> 
    <label>Title:</label> 
    {{input type="text" value=model.title}} 
    </div> 
    <div> 
    <label>Body:</label> 
    {{textarea rows="5" value=model.description}} 
    </div> 
    <div> 
    <button {{action 'save'}}>Speichern</button> 
    <button {{action 'cancel'}}>Abbrechen</button> 
    </div> 
</form> 

Repo ссылка: https://github.com/ghoshnirmalya/hub-client

+0

Попробуйте 'console.log (this.get ('model'))'. Кажется, что вызов может не возвращать модель. Прошло некоторое время с тех пор, как я использовал ember, но я не уверен, что вы можете присвоить значения модели в своем представлении. Я думаю, вам может потребоваться вызвать метод 'set()' модели. – user2027202827

+0

делает 'console.log (this.get ('model'))' просто печатает функцию модели. –

+0

О да ... извините. Попробуйте 'console.log (this.get ('model.title'))'. Я думаю, что вам нужно сделать, чтобы вы ввели текстовое значение в отдельную привязку, а затем сохраните эту привязку к своей модели, прежде чем отправлять свои данные, как показано в этом примере. Http://code.runnable.com/UmhZmnll6X4OAAAq/how-to- связывающиеся-модели-с-видом-и-контроллеров-в-Ember-JS-для-Jquery-JavaScript-рули-JS-и-html5. Опять же, прошло некоторое время с тех пор, как я использовал ember, поэтому это может быть не совсем точным, иначе все могло измениться (как это часто бывает с ember). – user2027202827

ответ

1

Вы не передавая название и описание от вашего .hbs на маршрут правильно. Вы создаете модель после запуска сохранения действия. Измените model.title на title и сделайте то же самое для описания. Передайте их до вашего маршрута: {{ save title description }}. Затем определите два параметра в вашем действии сохранения, например: save(title, description). Я уверен, что вы можете выяснить остальное.

+0

этот подход выглядел лучше всего, когда я ударил блок другими подходами. –

1

Вот что я обычно делаю в моих маршрутах:

setupController(controller /*, model */) { 
    this._super(...arguments); 
    Ember.set(controller, 'newCard', {}); //newCard is an empty object 
}, 
actions: { 
    save(newCard) { 
     Ember.assert('Model is missing or undefined', newCard); 
     let newCard = this.store.createRecord('card', newCard); 
     newCard.save().then((/* response */) => { 
      this.transitionTo('cards.all'); 
     }, (error) => { 
      //handle error 
     }); 
    } 
} 

И в шаблоне вы могли бы сделать что-то вроде этого:

<form id="save" {{action "save" newCard on="submit"}}> 
    {{input name="title" id="title" value=newCard.title type="text"}} 
    <button class="button" type="submit">Save</button> 
</form> 

Надеется, что это помогает. Джефф

1

В комментарии вы упомянули

делает console.log (this.get ('модель')) просто печатает функцию модели

Это ответ на ваш вопрос !. так как в пути у вас может быть функция крючка модели. поэтому this.get ('model') вернет функцию вместо модели. Итак, создайте контроллер для карт/new.js, и вы можете перемещать существующие действия сохранения. это должно сработать.

+0

в конце, я последовал этому подходу. –

+0

@NirmalyaGhosh еще вы хотели бы сохранить действия в маршруте, а затем добавить строку ниже в setupController() -> this.set ('NewCardModel', model); и в методе сохранения вы можете заменить this.get ('model') на this.get ('NewCardModel') ... Надеюсь, это поможет. – kumkanillam

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