Issue #951✓ ResueltoAbierto el 15 de marzo de 2018por FrciSmrciReacciones 4

La selección de componentes personalizados no es posible desde el lienzo.

Respuesta rápidapor FrciSmrci2

@artf Gracias de nuevo, depuraré teniendo esto en cuenta. :)

Lee la respuesta completa abajo ↓

Pregunta

Hola,

Intenté averiguarlo por mi cuenta, pero siento que estoy dando vueltas un poco en círculos. Así que espero que tengáis tiempo para leer esto y ayudarme con el problema.

Me sale una plantilla html con varias etiquetas de componentes personalizadas => ''<custom-component-tag></custom-component-tag><custom-component-tag></custom-component-tag><custom-component-tag></custom-component-tag>.

Para todos los componentes defino un nuevo componente en grapesjs tal como se describe en la documentación. Para cada componente renderizo una vista diferente, pero no manipulo el modelo porque quiero que el html siga igual al guardar.

Aunque los componentes tienen la siguiente configuración, la función de selección no parece funcionar con ellos. A continuación se puede ver un código de ejemplo.

Proporcioné un vídeo de pantalla en el que se puede ver que el componente es visible dentro del árbol de componentes y puede seleccionarse desde ahí, pero la selección no es posible desde el lienzo.

PD: Este componente de ejemplo que selecciono en el vídeo está resaltado, pero algunos de los otros tienen un conjunto de herramientas para arrastrar, etc., pero no están resaltados. Este sería el segundo problema. '''js private createCustomComponent(editor) { const comps = editor. DomComponents; const defaultType = comps.getType('default'); const defaultModel = defaultType.model; comps.addType('custom-component', { model: defaultModel.extend({ defaults: Object.assign({}, defaultModel.prototype.defaults, { removible: cierto, Arrastrable: Cierto, Droppable: falso, Badgable: Cierto, Estilizado: Cierto, Resaltable: Cierto, copiable: falso, redimensionable: falso, Editable: Cierto, }) }, { isComponent: function (el) { if (el.tagName === 'ETIQUETA-COMPONENTE-PERSONALIZADO') { return {type: 'custom-component'}; } } }), Definir la vista view: defaultType.view.extend({ render: función () { defaultType.view.prototype.render.apply(esto, argumentos); valor const = document.createElement('div'); this.el.appendChild(valor); console.dir(this.el); devuelvo esto; }, }), }); }


Gracias de antemano :) 

Respuestas (3)

👍 Muy útilFrciSmrci17 de marzo de 2018

@artf Gracias de nuevo, depuraré teniendo esto en cuenta. :)

artf17 de marzo de 2018

Hola, diría que esto es igual que el #260, así que tu 'const value = document.createElement('div');' que es puramente un elemento DOM, sin un 'model' asignado, está bloqueando al editor para seleccionar su padre 'custom-component'. Solución: '''js valor const = document.createElement('div'); value.style.pointerEvents = 'ninguno'; this.el.appendChild(valor);

artf17 de marzo de 2018

El resaltado se aplica mediante la clase 'gjs-comp-selected' que usa la propiedad 'outline', así que comprueba con inspector qué está pasando, probablemente tengas algún tipo de propiedad de reinicio (por ejemplo, 'outline: none;')

Preguntas y respuestas relacionadas

Continúa investigando con debates sobre temas similares.

Plugins de pago que cumplen con este problema

Seleccionado por temas clave y relevancia de etiquetas para ayudarte a enviar más rápido.

Ver todos los plugins

Cargando recomendaciones de plugins de pago...

Opción gratuita

Consulta los plugins de código abierto de GrapesJS en GitHub O haz una búsqueda rápida en nuestro catálogo gratuito.

Explora plugins gratuitos →
Opción premium

Los plugins premium incluyen soporte, actualizaciones regulares y funciones listas para producción — ahorrando días de trabajo de integración.

Explora plugins premium →

Tutoriales relacionados

Guías detalladas sobre el mismo tema.

Todos los tutoriales →

Explorar categorías de plugins

Ve directamente a las páginas de categorías de plugins en el marketplace.