如何修改`reopenClass`中的类与使用`extend`扩展类不同?

时间:2017-09-01 19:28:25

标签: ember.js ember-data

我正在使用Ember.js中的灯具适配器。

此:

let cars = DS.Model.extend({
  make: attr('string'),
  model: attr('string'),
  year: attr('string'),
  FIXTURES: [
    {
      id: 1,
      model: 'foo',
      make: 'bar',
      year: '2001'
    }
  ]
});

引发“无法找到固定装置”

鉴于此:

let cars = DS.Model.extend({
  make: attr('string'),
  model: attr('string'),
  year: attr('string'),
});

cars.reopenClass({
  FIXTURES: [
    {
      id: 1,
      model: 'foo',
      make: 'bar',
      year: '2001'
    }
  ]
});

效果很好。我希望它们是相同的,但有什么区别?

1 个答案:

答案 0 :(得分:0)

使用reopenClass,你可以在课堂上放置一些东西而不是实例。

因此,如果您有课程,并执行reopenreopenClass

const MyClass = Ember.Object.extend({
  foo: 'foo'
})`;
myClass.reopen({
  bar: 'bar'
});
myClass.reopenClass({
  baz: 'baz'
});

然后创建一个实例

const myInstance = MyClass.create({});

然后,您可以在实例上访问foobar

myInstance.get('foo'); // foo
myInstance.get('bar'); // bar

但是`baz关于班级本身:

myClass.get('baz'); // baz