ウィキペディアから:
オブジェクト指向プログラミング言語では、ミックスインは、他のクラスのメソッドの組み合わせを含むクラスです。このような組み合わせがどのように行われるかは言語によって異なりますが、継承によるものではありません。組み合わせに組み合わせたクラスのすべてのメソッドが含まれている場合、それは多重継承と同等です。
Ember では、オブジェクトのインスタンスは、create
引数のないメソッド、またはそのタイプのプロパティを表す単一のハッシュ (kvo) を使用して作成され、自動的に入力されます。例:
var SomeClass = Ember.Object.extend({
name: '',
url: ''
});
// this instance will have a "name" and a "url" properties with blank values
var someInstance = SomeClass.create();
// this instance will have the same properties, but now
// their values will be populated
var anotherInstance = SomeClass.create({
name: 'Ember.js',
url: 'http://emberjs.com'
})
一方、では、別のクラス定義を 1 つのオブジェクト インスタンスまたは別のクラスに混在crateWithMixins
させることができます。したがって、上記と同じものを持っているが、それをサブクラス化して別のタイプを作成したくないとしましょう。この場合、 aを使用して、その 1 つのインスタンスだけが 2 つのクラスのその定義を持つようにすることができます。例:SomeClass
extend
Mixin
var SomeClass = Ember.Object.extend({
name: '',
url: ''
});
// note that you don't extend a mixin, you only create
var SomeOtherClass = Ember.Mixin.create({
doSomething: function() {
console.log('doing my thing');
}
});
// This instance will have a method called "doSomething"
var x = SomeClass.createWithMixins(SomeOtherClass, {
name: 'Ember.js',
url: 'http://emberjs.com'
});
// this instance only has methods/properties defined in "SomeClass"
// therefore, no method called "doSomething"
var y = SomeClass.create({
name: 'Google',
url: 'http://google.ca'
});
ただし、 を使用して新しいクラスを作成する場合は、次のように を最初の引数として渡すMixin
ことができます。extend
Em.Object
Mixin
var AnotherClass = Ember.Object.extend(SomeOtherClass, {
firstName: '',
lastName: ''
});
var z = AnotherClass.create();
z.set('firstName', 'Hiro');
z.set('lastName', 'Nakamura');
z.doSomething();
API ドキュメントとこのJSFiddleを確認してください。
編集: に関しては_super()
、(経由で) 新しいクラスを作成するときにのみこれを使用しますextend
。create
既存のクラスのインスタンスを作成するときは、 を呼び出すべきではありません_super()
。
別物。私はあなたが直接しようとしcreate
ているのを見ます。View
あなたのコードに基づいて、拡張Ember.View
し、フレームワークが適切なタイミングでインスタンスを作成できるようにする必要があると思います。手動で作成する場合、DOM への追加、削除など、ワークフローの一部を担当することになります。全体像が見えないかもしれませんが、このコードだけに基づいて、そうすべきではないcreate
と思います。そこに電話しextend
て代わりに電話すると、電話できるようになります_super()