code: function buildViewAttribs( def, code ) {
      code.pm = true;
      const attribs = def[ "view.attribs" ];
      if ( typeof attribs !== 'object' ) return;
      try {
          for ( const attName of Object.keys( attribs ) ) {
              if ( !RX_VIEW_ATTRIB.test( attName ) )
                  throw Error( `Bad syntax for attribute's name: ${JSON.stringify(attName)}
   Example of valid syntax: action, duration-visible, ...
   Example of invalid syntax: 0, durationVisible, ...` );
              const
                  attValue = expandViewAttribValue( attribs[ attName ] ),
                  camelCaseAttName = camelCase( attName );
              if ( isSpecial( attValue ) || Array.isArray( attValue[ 0 ] ) ) {
                  buildViewAttribsSpecial( camelCaseAttName, attValue, code );
              } else {
                  // flat: true
                  buildViewAttribsInit( camelCaseAttName, attValue, code );
                  code.section.attribs.define
                      .push( `pm.create(${JSON.stringify(camelCaseAttName)}, {init: ${JSON.stringify(attValue)}});` );
              }
          }
      } catch ( ex ) {
          bubble( ex, `view.attribs: ${JSON.stringify(attribs, null, "  ")}` );
      }
  }
docs: @param {object} def - ``.
  @param {Template} code - Template.
  
  @example
  view.attribs: {
  flat: true
  type: [default, primary, secondary]
  count: {integer}
  content: {string ok behind: onContentChanged}
  }
  
  @returns {undefined}