2015-09-13 8 views

Antwort

13

Ein GraphQL-Typ kann sich auf sich selbst beziehen (oder sich auf einen anderen in einer Datei später definierten Typ beziehen), indem er fields als Funktion definiert, die ein Objekt und kein Objekt zurückgibt. Die Funktion wird aufgerufen, nachdem die Seite vollständig analysiert wurde.

Für Ihr Beispiel:

var routeType = new GraphQLObjectType({ 
    name: 'MessageRoute', 
    fields: function() { 
    return { 
     name: { 
     type: GraphQLString 
     }, 
     routes: { 
     type: new GraphQLList(routeType), 
     resolve: (route) => { 
      return route.routes; 
     } 
     } 
    }; 
    } 
}); 

Oder, wenn Sie ES6 verwenden, eine nette Abkürzung für diese mit dem Pfeil Funktionen:

var routeType = new GraphQLObjectType({ 
    name: 'MessageRoute', 
    fields:() => ({ 
    name: { 
     type: GraphQLString 
    }, 
    routes: { 
     type: new GraphQLList(routeType), 
     resolve: (route) => { 
     return route.routes; 
     } 
    } 
    }) 
}); 
+0

Cooler Dank, jede Idee, wie ich die reagieren Seite der Dinge zu schreiben, ohne eine immer Paketüberfluss? – SammoSampson

1

Ich mag darauf hinweisen, dass Sie Verwenden Sie eine Funktion für eine beliebige Eigenschaft in einem Objekt mit Javascript getter.

Anstatt also innerhalb einer Funktion die gesamte fields Eigentum der Verpackung können Sie eine Funktion nur für die type Eigenschaft wie folgt verwendet werden:

var routeType = new GraphQLObjectType({ 
    name: 'MessageRoute', 
    fields: { 
    name: { 
     type: GraphQLString 
    }, 
    routes: { 
     get type() { 
     return new GraphQLList(routeType) 
     }, 
     resolve: (route) => { 
     return route.routes; 
     } 
    } 
    } 
});