Emberjs如何创建一个新的belongsTo项目

时间:2014-07-31 14:12:58

标签: ember.js ember-cli

我正在开发一个简单的待办事项应用,其中每个待办事项属于用户。我收到此错误:

Uncaught Error: Nothing handled the action 'createTodo'.

我想我错过了一条路线,也许还有一个控制器,但我不确定我需要做什么。

应用/ 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;

应用/路由/用户/ index.js:

import Ember from 'ember';

export default Ember.Route.extend({
  model: function() {
    return this.store.find('user');
  }
});

应用/模型/ user.js的:

import DS from 'ember-data';

export default DS.Model.extend({
  name: DS.attr('string'),
  todos: DS.hasMany('todo')
});

应用/模型/ todo.js:

import DS from 'ember-data';

export default DS.Model.extend({
  title: DS.attr('string'),
  user: DS.belongsTo('user')
});

应用/控制器/ 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();
    }
  }
});

应用/模板/用户/ 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>

1 个答案:

答案 0 :(得分:1)

问题是createTodo是在TodoController中实现的,而您在createTodo模板中使用users/show操作。操作将发送到未实现createTodo的UsersShowController。将createTodo操作移至UsersShowController,一切正常。