2016-04-08 20 views
4

Bu soru fabricJS ve tuvale ait. Aşağıdaki durumda, hangi özelliğin doğru olduğunu kontrol edin (obj.background == true). Tuvalde birkaç görüntü olabilir. İlk nesne tespitinden sonra, döngüyü sonlandırmak istiyorum. Bunu nasıl yapıyorum? Ben return false; kullanılmış ama işe yaramadı. İşte fonksiyon.EachObject döngüsü nasıl sonlandırılır?

canvas.forEachObject(function(obj){ 
     if(obj.isType('image') && obj.hasOwnProperty('background')){ 
      if(!obj.background == true){ 
       alert("true"); 
       return false; 
      } 
     } 
    }); 
+1

İçinde bir "bayrak" olabilir .. Ama bir döngü sonlandırmak istiyorsanız, "for-loop ... break" ile gidin; – Rayon

+0

Devam et? – Phil795

+1

Benzer şekilde, forEachObject', her nesne 'işlevine (obj)' karşı yapılmadan önce döngüyü sonlandırmak için tasarlanmamıştır. Normal for döngüsü kullanmayı düşünebilirsiniz. – Ian

cevap

4

Şimdi ben kullanmadıysanız FabricJS bir getObjects() yöntem yoktur kaynağına bakarak (aşağı-oyların Spam zaten bekliyor). Bu, forEachObject() gibi özel bir yineleyici yerine bir dizi nesne döndürür.

Böylece forEach(), some(), every() vb. Gibi tüm normal dizi itterasyon yöntemlerini kullanabilirsiniz.

Anlayışım, nesnenin bir resim olup olmadığını ve arka plan özelliğinin true olup olmadığını kontrol etmek ve ilk oluşumda döngüyü iptal etmek mi istiyorsunuz? Bu yapmalı.

canvas 
    .getObjects() 
    .some(obj => { 
     if (obj.isType('image') && obj.hasOwnProperty('background') && obj.background === true) { 
      console.log('Aww shucks, you found me.'); 
      return true; 
     } 
    }); 

Açıkçası bu, sözde koddur. Esasen, tüm nesneleri döndürecek ve dönüşünüz true ise iptal edilecektir. Herhangi bir öğe true döndürürse, some döndürme değeri de true olacaktır. Michał Dopieralski'den sonra DÜZENLEME.

Ben getObjects bir tür geçirilmiş olabilir ve sizin için sonuçları filtreleyecek. Yani bu şeyleri kullanmak daha da basitleşiyor.

array some docs

fabricjs getObjects source


EDIT'e

canvas 
    .getObjects('image') 
    .some(obj => { 
     if (obj.background === true) { 
      console.log('Aww shucks, you found me.'); 
      return true; 
     } 
    }); 

: hasOwnProperty çek i sanmıyorum gerekli olmamalıdır Yan not. obj tanımlandığı sürece, mevcut olmayan bir özelliğe erişim undefined döndürecektir. Hangi === true kontrol başarısız olur.

+1

Ve ne olursa olsun bir nesne tipini getObjects() öğesine geçirebilir ve ihtiyacınız olan bir dizi nesneyi alabilirsiniz. Örneğin, canvas.getObjects ('image') size bir object.type === 'image' :-) dizisi verir. –

İlgili konular