ember js如何扩展模型

时间:2014-03-19 15:16:50

标签: ember.js model ember-data

我正在尝试扩展模型,但我无法弄清楚如何做到这一点。

假设我想要TodoMVC中的2种不同的待办事项 第一个将添加一个网址,第二个将添加一个段落。(示例)

这就是我的想法:

Todos.Todo = DS.Model.extend({
  title: DS.attr('string'),
  isCompleted: DS.attr('boolean')
});

Todos.Todo.FIXTURES = [
  {
    id: 1,
    title: 'Learn Ember.js',
    isCompleted: true,
  },
  {
    id: 2,
    title: '...',
    isCompleted: false,
  },
  {
    id: 3,
    title: 'Profit!',
    isCompleted: false,
  }
];

Todos.TodoURL = Todos.Todo.extend({
    url: 'google.com',
});

Todos.TodoParagraph = Todos.Todo.extend({
    paragraph: 'Lorum...',
});

但是这给了我Assertion failed: Unable to find fixtures for model type Todos.TodoURL

我找到了reopen函数,但是没有为我的模型提供get和set函数。

2 个答案:

答案 0 :(得分:2)

这是因为ember-data正在尝试使用Todos.TodoURL.FIXTURESTodos.TodoParagraph.FIXTURES检索您的灯具。但是当你扩展类时,这些属性不会被继承。要使静态方法和属性继承,您应该使用reopenClass

Todos.Todo.reopenClass({
  FIXTURES: [
    {
      id: 1,
      title: 'Learn Ember.js',
      isCompleted: true,
    },
    {
      id: 2,
      title: '...',
      isCompleted: false,
    },
    {
      id: 3,
      title: 'Profit!',
      isCompleted: false,
    }
  ]
});

我希望它有所帮助

答案 1 :(得分:0)

您必须将Fixtures或REST-Adapter修改为Todos.TodoURL和TodoParagraph。那将是有效的。 Ember Data从类的名称获取要转到的URL,因此当您检索TodoURL时,它将调用/ todoUrl /.