2017-09-01 5 views
0

私はEmber.jsの治具アダプタで遊んでいます。`reopenClass`のクラスを` extend`を使ってクラスを拡張するのとどのように変更するのですか?

この:

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' 
    } 
    ] 
}); 
素晴らしい作品

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

この一方

"備品を見つけることができません" をスローします。私はそれらが同じであることを期待します、しかし、違いは何ですか?

答えて

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 

しかし、 `ba zをクラスそのもの:

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

明確にするには、 'reopenClass'は基本的にEmberのクラスの静的属性を指定するために使用されます。 'extend'と' reopen'はインスタンス属性を定義したり上書きするためにクラスで呼び出されます。それは適切な説明だとお考えですか? – pixelpax

+0

'reopenClass'を修正しました。 'extend'と' reopen'の違いは、 'extend'が* new *クラスを作成し、' reopen'が既存クラスを変更することです。しかし、ええ、両方ともインスタンス/属性です。 – Lux

関連する問題