2015-11-23 2 views
0

Pseudo-code ci-dessous. Ma collection de résultats comprend un sous-ensemble d'images optionnel. Ce que j'essaie de faire est de vérifier si des images existent pour un produit avant d'essayer d'accéder à une image.href à utiliser comme source d'image. Dans le cas où les images n'existent pas, elles se cassent à chaque fois. Alternativement, j'ai essayé typeof 'indéfini' et cela n'a pas fonctionné non plus.Meteor détectant l'existence d'un champ dans la collection

 if (this.products) { 
      //return "<i class='fa fa-gift'></i>" 
      console.log("has products"); 
      if (this.products[0].images) { <--- breaks 
       console.log("item 0 has images"); 
      } 
      if (this.products.images) { <--- breaks 
       console.log("has images"); 
      } 
     } else { 
      console.log("don't have products"); 
     } 

EDIT/UPDATE

Je pense que Patrick Lewis En fin de compte fourni la meilleure solution pour cela - en utilisant un opérateur ternaire hybride. Va comme:

myVar = objet & & objet.name || "foo"

ci-dessus affecterait à myVar la valeur name si l'objet existe et qu'il a un nom, ou ... il assignera un "foo" statique.

Répondre

1

Probablement this.products est un tableau vide. Essayez:

if (this.products && this.products.length) { 
    var images = this.products[0].images; 

    if (images && images.length) { 
     console.log("item 0 has images"); 
    } else { 
     console.log("item 0 does not have images"); 
    } 
} else { 
    console.log("don't have products"); 
} 
+0

Merci pour les commentaires rapides, malheureusement aucune de ces travaillé pour moi. Ce sont deux tableaux imbriqués. Lorsqu'il y a des valeurs, c'est l'instruction d'affectation: this.products [0] .images [0] .href. Le test ci-dessous échoue lors de la vérification des images. Frustrant! –

+0

alors vérifiez aussi les images) J'ai mis à jour ma réponse – imkost

+0

Okay - gotcha - c'est fondamentalement exactement ce que j'ai atterri dessus. –

0

this.products est votre collection ou le résultat d'une requête comme MyColl.find()?

si cela est le résultat d'une requête, vous pouvez le faire:

if (typeof this.products == "object") { 
    if (typeof this.products.images == "object") { // if images is a property of products and images is an array 
// od what you want here 
    } 
}