2011-04-01 2 views
0

Dans Dashcode, si j'ai une dataSource qui a, par exemple, 2 champs appelés 'FirstName' et 'Last Name', comment puis-je concaténer les 2 champs en un seul texte champ dans une vue de liste? Je suis assez sûr qu'il doit être d'utiliser un transformateur de valeur, disons que j'affecte le champ 'FirstName' au champ de texte, et ajoute un transformateur de valeur ... comment puis-je ajouter la valeur 'LastName' à la variable 'value' dans le transformateur.Dashcode - comment combiner deux valeurs d'une source de données

Je suis sûr que c'est à voir avec dashcode.getDataSource et valueForKeyPath et je pense que je suis proche de la solution, mais tout semble un peu délavé, donc toute aide serait très appréciée.

Répondre

4

Correct - vous devez utiliser un transformateur de valeur.

Dans le Transformer, vous coderez comme suit:

itemDescription = Class.create(DC.ValueTransformer,{ 
    transformedValue: function(value){ 

    var itemDataSource = dashcode.getDataSource('itemsList'); // The Data Source Name here 
    var lastName = itemDataSource.selection().valueForKey('lastName'); // Presumes you have a field called lastName 
    return value + " " + lastName; 
    } 
}); 

Hope this helps - Je me suis battu avec cela pour un jour !!!

+0

Si vous souhaitez avoir 2 champs dans une liste (comme dans un côté DashCode splitview maître d'un maître/détail), vous devez utiliser 2 champs séparés. Cela ne fonctionnera pas dans ce cas. – ferdil

0

Pour l'avenir Googlers, car il n'y a absolument aucune documentation nulle part à ce sujet:

Lorsqu'en vue détaillée à concaténer deux champs de même la source de données:

XML

<?xml version="1.0" encoding="utf-8"?> 
<immobilier>  
    <bien> 
    <ID>1453</ID> 
    <Titre>Maison/Villa F4</Titre> 
    <Ville>Sainte Clotilde</Ville> 
    <Quartier>BRETAGNE</Quartier> 
    </bien> 
</immobilier> 

Pour combiner les champs Ville et Quartier, créez un transformateur de valeur comme suit:

mapAdresse = Class.create(DC.ValueTransformer,{ 
    transformedValue: function(value){ 

     if (value.trim() != "") { 
      //Replace immoListe with your source name 
      var itemDataSource = dashcode.getDataSource('immoListe'); 

      //THIS IS THE MOST IMPORTANT : HOW TO FIND THE CURRENTLY SELECTED ITEM INDEX 
      var selectedIndex = document.getElementById('list').selectedIndex; 

      //Use the selectedIndex to find the record in the datasource 
      var quartier = itemDataSource.selection().valueForKey("bien")[selectedIndex].valueForKey("Quartier"); 

      //Concatenate to your liking 
      if (quartier.trim() != "") value = value + ", "+ quartier; 
     } 

     return value; 
    } 
}); 

Pourquoi cela n'est-il pas documenté? Me bat !!

Questions connexes