: nesne yönelimli programlama dillerinde
, bir mixin diğer sınıflardan yöntemleri bir arada içeren bir sınıftır. kombinasyonunun nasıl yapıldığı dile bağlıdır, ancak mirasa göre değildir. Kombinasyon, birleşik sınıfların tüm yöntemlerini içerirse, çok sayıda mirasa eşdeğer olan 'dır. Nesnelerin Kor durumlarda
bir bağımsız değişken ile
create
yöntemiyle oluşturulan, ya da tek bir karma bu tür özelliklerini temsil (kvo) ile ve otomatik olarak doldurulur edilir. Örnek: Öte yandan
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'
})
, crateWithMixins
, tek bir nesne örneğine veya başka sınıfa mix başka sınıf tanımı etmenize olanak tanır. Yani, aynı SomeClass
koduna sahip olduğunuzu varsayalım, ancak extend
aracılığıyla alt sınıflara ayırmak ve başka bir tür oluşturmak istemezsiniz. Bu durumda, yalnızca bir örneğin iki sınıfın tanımına sahip olduğundan emin olmak için Mixin
'u kullanabilirsiniz. Örnek: Eğer ilk argüman olarak Mixin
geçen bir Mixin
yapabilirsiniz extend
Em.Object
ile yeni bir sınıf oluşturmak istiyorsanız
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'
});
Ancak şöyle:
var AnotherClass = Ember.Object.extend(SomeOtherClass, {
firstName: '',
lastName: ''
});
var z = AnotherClass.create();
z.set('firstName', 'Hiro');
z.set('lastName', 'Nakamura');
z.doSomething();
Kontrol dışarı API Documentation yanı sıra bu JSFiddle.
Düzenleme: _super()
gelince sen (extend
yoluyla) yeni bir sınıf oluştururken, sadece bu kullanın. Mevcut sınıfların create
örneklerini kullandığınızda, _super()
'u aramamalısınız.
Başka bir şey. Gördüğünüz gibi, create
a View
doğrudan deniyorsunuz. Kodunuza bağlı olarak, Ember.View
'u genişletmeli ve çerçevenin uygun zamanda sizin için örnek oluşturmasına izin vermelisiniz. Manuel olarak oluşturursanız, iş akışının bazı bölümlerinden DOM'ye eklenmek, kaldırmak, vb.Belki resmin bütününü görmüyorum, ancak bunun tek başına koduna dayalı, sana yerine extend
değil orada çağrıyı create
ve çağrı gerektiğini düşünüyorum ve sonra _super()
@Joe, teşekkür a aramak mümkün olacak Bu ayrıntılı açıklama için çok fazla. Benim için gerçekten çok yardımcı oldu. Örnek oluşturma sırasında .super() yöntemini kullanmamamız gerekiyorsa, küçültülmüş sürümünü kullandığımda neden bir hata alamıyor? – phkavitha
Emin değilim, ama belki de küçültülmüş versiyon birkaç iddia çıkartıyor. Genellikle hata ayıklama/geliştirme sürümü, üretim kullanımı için minified iken olası sorunları tanımlamanıza yardımcı olacak tüm iddialara sahiptir, dolayısıyla testinizin tamamlandığını varsayar. – MilkyWayJoe