Hesaplanmış bir özelliğin içinde işlevinin() kullanılmasının neden işe yaradığını anlamaya çalışıyorum, ancak yağ oku yapmıyor.Bu, ember.js hesaplanmış özellikteki bir değeri nasıl tanımlanır?
Oluşturduğum bir sınıf ve hesaplanmış özelliklerin iki tanımı, biri function() {}
(foo) içinden diğeri de () => {}
çubuğundan geçiyor. Referans için de (foo1 ve bar1) de forEach() dizisine geçirilen iki stilde de yer verdim.
Birisi, bu dört örneğin her birinde neler olduğunu açıklayabilir mi? Burada
import Ember from 'ember';
const Light = Ember.Object.extend({
isOn: false,
color: 'red',
foo: Ember.computed('isOn', 'color', function() {
console.log(`this in foo is ${this}`);
}) ,
foo1: [1].forEach(function() {
console.log(`this in foo1 is ${this}`);
}) ,
bar: Ember.computed('isOn', 'color', () => {
console.log(`this in bar is ${this}`);
}),
bar1: [1].forEach(() => {
console.log(`this in bar1 is ${this}`);
})
});
export default Ember.Controller.extend({
appName: 'Ember Twiddle',
init() {
this._super();
this.set('bulb', Light.create());
}
});
Tüm 4 özelliklere
<h1>Welcome to {{appName}}</h1>
<br>
<br>
{{outlet}}
<br>
<br>
<p> the bulb is {{bulb.isOn}} </p>
<p> the bulb is {{bulb.foo}} </p>
<p> the bulb is {{bulb.foo1}} </p>
<p> the bulb is {{bulb.bar}} </p>
<p> the bulb is {{bulb.bar1}} </p>
ve burada konsola baskılı sonuçlardır başvuran şablondur. İşte
DEBUG: -------------------------------
VM66 ember.debug.js:6395 DEBUG: Ember : 2.4.4
VM66 ember.debug.js:6395 DEBUG: Ember Data : 2.4.3
VM66 ember.debug.js:6395 DEBUG: jQuery : 1.11.3
VM66 ember.debug.js:6395 DEBUG: -------------------------------
VM70 about:srcdoc:29 this in foo1 is undefined
VM70 about:srcdoc:35 this in bar1 is undefined
VM70 about:srcdoc:26 this in foo is <(unknown mixin):ember360>
VM70 about:srcdoc:32 this in bar is undefined
muhtemelen bildiğiniz gibi link,
foo1: [1].forEach(function() {
console.log(`this in foo1 is ${this}`);
fonksiyonları hesaplanmamış formun https://ember-twiddle.com/d5905b42eff57e8ad5c99a27a3199429?openFiles=templates.application.hbs%2C
Sanırım başkalarının neden çalışmadığını anlıyorum. Sanırım hala birazcık takılıyorum, bunun nedeninin “bu” nun bir şekilde Ember'in bağlamı olmadığına dair bir anlayışa sahip olmadığını anlamasıdır. – nPn
@nPn 'function() {} .bind (this)' ile 'Ember.computed' arasında geçiş yapıyorsunuz, geçirdiğiniz içerik ya pencere ya da undefined (sıkı moda bağlı olarak), Light ember nesnesi henüz oluşturulmuş, yinelenen soruya bir göz atın. Eğer hala belirsiz ise, bizi özgür kunduz cemaatindeki -help veya -genel kanallarda bulabilirsiniz. –
Ben _think_ Şimdi anlıyorum. Anahtar bilgi şu şekildedir: "Ember, hesaplanan özelliklerin bir parçası olarak belirtilen işlevleri söz konusu nesnenin bağlamıyla (bu ile) çağırır". Ember.computed kaynağına baktım ve orada bir uygulama() gördüm, bu yüzden böyle başarıldı. Muhtemelen böyle yaygın bir uygulamadır ('bu' sizin için doğru 'sağlamaya yardımcı olan çerçeveler), ama benim için (naif) Ben sadece _why_ çalıştı anlayamadım. Gevşek toplumun işaretçisi için teşekkürler. – nPn