Emberjs como criar um novo item pertence a
Pergunta
Estou trabalhando em um aplicativo de tarefas simples, onde cada item de tarefas pertence a um usuário.Estou recebendo este erro:
Uncaught Error: Nothing handled the action 'createTodo'.
Acho que estou perdendo uma rota e talvez um controlador, mas não tenho certeza do que preciso fazer.
app/router.js:
import Ember from 'ember';
var Router = Ember.Router.extend({
location: TodoENV.locationType
});
Router.map(function() {
this.route('about');
this.resource('users', function() {
this.route('show', {path: ':user_id'});
});
});
export default Router;
app/rotas/usuários/index.js:
import Ember from 'ember';
export default Ember.Route.extend({
model: function() {
return this.store.find('user');
}
});
app/models/user.js:
import DS from 'ember-data';
export default DS.Model.extend({
name: DS.attr('string'),
todos: DS.hasMany('todo')
});
app/models/todo.js:
import DS from 'ember-data';
export default DS.Model.extend({
title: DS.attr('string'),
user: DS.belongsTo('user')
});
app/controllers/todo.js:
import Ember from 'ember';
export default Ember.ArrayController.extend({
actions: {
createTodo: function() {
var title = this.get('newTitle');
if (!title.trim()) { return; }
var todo = this.store.createRecord('todo', {
title: title // how do I get the user id?
});
this.set('newTitle', '');
todo.save();
}
}
});
app/templates/users/show.hbs:
<h4>{{name}}</h4>
<h5>Todos</h5>
{{input type="text" id="new-todo" placeholder="new todo"
value=newTitle action="createTodo"}}
<ul>
{{#each todos}}
<li>{{title}}</li>
{{/each}}
</ul>
Solução
O problema é que createTodo é implementado em TodoController enquanto você está usando createTodo
ação em users/show
modelo.A ação é enviada para o UsersShowController
onde createTodo não está implementado.Mover createTodo
ação em UsersShowController
e tudo deve ficar bem.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow