2015-10-10 28 views
7

yüzden Meteor yılında ES6 kullanılarak başlatılmış, ancak görünüşe göre bir ok fonksiyonu ile Meteor.publish sözdizimi kullanmaya çalışırsanız bir ile kullanmak durumunda iken, this.userId, tanımsız Düzenli function(){}this.userId mükemmel çalışır, Im, farklı bir bu, userId atama, ancak sadece bir tahmin olduğunu bir transpiler süreci olduğunu varsayan, gerçekten ne olduğunu bilen var mı?ES6 Ok fonksiyonu Meteor.publish bu kapsamını değişiyor

Meteor.startup(function() { 
    Meteor.publish("Activities", function() { //with function 
     console.log(this.userId); //TS8vTE3z56LLcaCb5 
    }); 
}); 

Meteor.startup(function() { 
    Meteor.publish("Activities",()=> { //with arrow function 
     console.log(this.userId); //undefined 
    }); 
}); 
+0

MDN'den: * "Ok işlev ifadesi (yağ ok işlevi olarak da bilinir), işlev ifadeleriyle karşılaştırıldığında daha kısa bir sözdizimine sahiptir ve **" bu "değerini ** sözcük olarak bağlar." * Https: //developer.mozilla .org/en-US/docs/Web/JavaScript/Referans/İşlevler/Arrow_functions –

+0

@FelixKling bu yinelenen bir soru nedir? – ncubica

+0

Ok işlevlerinin nasıl çalıştığını anlatıyor: –

cevap

7

Bu değil bir transpilation hatası, bu ok fonksiyonları feature bu. Ok işlevi, işlev gövdesinin bağlamını, burada oluşturulduğu bağlamlara otomatik olarak ayarlar, bu durumda geri arama Meteor.publish. Bu, Meteor'ın dinleyici işlevinizin bağlamını yeniden açmasını engeller. Meteor publish docs itibaren

: Fonksiyonun içerisinde

, bu işler düzgün çalışması için siz "eski okul" işlevini kullanmanız gerekecektir istiyorsanız işleyici nesnesi

yayınlamaktır Meteor'ın içeriği doğru şekilde ayarlamasına izin vermek için sözdizimi.

+0

"ok-fonksiyonu" olarak adlandırılır, "yağ-ok fonksiyonu" değil, –

+0

Tamamen doğru :) yağ-ok arkasında güçlü bir konuşma ağırlığı olmasına rağmen, ben güncellenecektir! Teşekkürler –

+1

"Ok işlev ifadesi (aynı zamanda yağ ok işlevi olarak da bilinir) ..." -MDN –