2016-03-22 21 views
0

Ich habe versucht, die Standardvorlage in einer Ruhe Abfrage diese verwenden:Wie Vorlagen verwenden in strapi

/company/somecompanyid?template=default 

Aber ich alle noch die Daten aus meiner mongodb einschließlich Feldern und Sammlungen von verknüpften Tabellen erhalten, die nicht in den Vorlagen.

Dies wird auch als default im Modell definiert, aber es scheint nicht die Ergebnisse in irgendeiner Weise zu beeinträchtigen.

  1. Kann jemand erklären, was ich falsch mache und wie man die Schablone anwendet?

  2. Wenn ich nur die Objekt-ID, anstatt eine ganze damit verbundene Aufgabe in der Antwort enthalten sein soll, wie ich es in der Vorlage angeben?

company.js:

'use strict'; 

/** 
* Module dependencies 
*/ 

// Node.js core. 
const path = require('path'); 

// Public node modules. 
const _ = require('lodash'); 
const anchor = require('anchor'); 

// Local dependencies. 
const WLValidationError = require('../../../node_modules/waterline/lib/waterline/error/WLValidationError'); 

// Settings for the Company model. 
const settings = require('./Company.settings.json'); 

/** 
* Export the Company model 
*/ 

module.exports = { 

    /** 
    * Basic settings 
    */ 

    // The identity to use. 
    identity: settings.identity, 

    // The connection to use. 
    connection: settings.connection, 

    // Do you want to respect schema? 
    schema: settings.schema, 

    // Limit for a get request on the list. 
    limit: settings.limit, 

    // Merge simple attributes from settings with those ones. 
    attributes: _.merge(settings.attributes, { 

    }), 

    // Do you automatically want to have time data? 
    autoCreatedAt: settings.autoCreatedAt, 
    autoUpdatedAt: settings.autoUpdatedAt, 

    /** 
    * Lifecycle callbacks on validate 
    */ 

    // Before validating value 
    beforeValidate: function (values, next) { 
    // WARNING: Don't remove this part of code if you don't know what you are doing 
    const api = path.basename(__filename, '.js').toLowerCase(); 

    if (strapi.api.hasOwnProperty(api) && _.size(strapi.api[api].templates)) { 
     const template = strapi.api[api].templates.hasOwnProperty(values.template) ? values.template : strapi.models[api].defaultTemplate; 
     const templateAttributes = _.merge(_.pick(strapi.models[api].attributes, 'lang'), strapi.api[api].templates[template].attributes); 

     // Handle Waterline double validate 
     if (_.size(_.keys(values)) === 1 && !_.includes(_.keys(templateAttributes), _.keys(values)[0])) { 
     next(); 
     } else { 
     const errors = {}; 

     // Set template with correct value 
     values.template = template; 
     values.lang = _.includes(strapi.config.i18n.locales, values.lang) ? values.lang : strapi.config.i18n.defaultLocale; 

     _.forEach(templateAttributes, function (rules, key) { 
      if (values.hasOwnProperty(key)) { 
      // Check rules 
      const test = anchor(values[key]).to(rules); 

      if (test) { 
       errors[key] = test; 
      } 
      } else if (rules.required) { 
      errors[key] = [{ 
       rule: 'required', 
       message: 'Missing attributes ' + key 
      }]; 
      } 
     }); 

     // Go next step or not 
     _.isEmpty(errors) ? next() : next(new WLValidationError({ 
      invalidAttributes: errors, 
      model: api 
     })); 
     } 
    } else if (strapi.api.hasOwnProperty(api) && !_.size(strapi.api[api].templates)) { 
     next(); 
    } else { 
     next(new Error('Unknow API or no template detected')); 
    } 
    } 

    /** 
    * Lifecycle callbacks on create 
    */ 

    // Before creating a value. 
    // beforeCreate: function (values, next) { 
    // next(); 
    // }, 

    // After creating a value. 
    // afterCreate: function (newlyInsertedRecord, next) { 
    // next(); 
    // }, 

    /** 
    * Lifecycle callbacks on update 
    */ 

    // Before updating a value. 
    // beforeUpdate: function (valuesToUpdate, next) { 
    // next(); 
    // }, 

    // After updating a value. 
    // afterUpdate: function (updatedRecord, next) { 
    // next(); 
    // }, 

    /** 
    * Lifecycle callbacks on destroy 
    */ 

    // Before updating a value. 
    // beforeDestroy: function (criteria, next) { 
    // next(); 
    // }, 

    // After updating a value. 
    // afterDestroy: function (destroyedRecords, next) { 
    // next(); 
    // } 
}; 

die Vorlage, die eine Teilmenge des Unternehmens ist Attribute (CompanyDefault.template.json):

{ 
    "default": { 
    "attributes": { 
     "name": { 
     "required": true 
     }, 
     "address": {}, 
     "phone": {}, 
     "email": {} 
    }, 
    "displayedAttribute": "name" 
    } 
} 

Antwort

0

Können Sie uns Ihre Standardvorlage anzeigen Datei? Um das Vorlagensystem zu verwenden, müssen Sie Ihr Modell aus dem Studio oder der CLI generieren. Die Vorlagenlogik befindet sich in Ihrem Fall in der Datei "/api/company/models/Company.js". Es wird interessant sein, uns diese Datei auch zu zeigen.

Sie den richtigen Weg mit der Vorlage angezeigt wird. Deine URL scheint gut zu sein! Es ist jedoch nicht möglich, jetzt nur die Objekt-ID und nicht das ganze verwandte Objekt zu berücksichtigen. Um dies zu tun, rate ich Ihnen, GraphQL oder eine RAW-Abfrage zu verwenden ...

In der V2 werden wir die JSON-API-Spezifikationen in Strapi unterstützen, das wird mit Ihrer Problematik sicher passen!

PS: Ich bin einer der Autoren von Strapi.

+0

Danke, ich die Fragen bearbeitet haben die erforderlichen Dateien – Golem

+0

enthalten, die verrückt ist, die Dateien 'Company.js' sieht perfekt und Ihre Vorlage auch! Können Sie Ihre 'template'- und' templateAttributes'-Variablen in Zeile 63 protokollieren? –