Establecer Loader.active en falso no libera el elemento inmediatamente

Tengo un caso de uso donde, dependiendo de la presencia o ausencia de un valor de propiedad, se crea o elimina un objeto que hace referencia a él. Estoy usando unLoader para el propósito, donde elactive la propiedad está vinculada a la propiedad, es decir, cuando la propiedad tiene un valor no nulo, el cargador se activa, cuando se establece en nulo, se desactiva.

Sin embargo, el problema es que el cargador no libera su elemento de inmediato, por lo que por un momento el elemento hace referencia a una propiedad nula, por lo que no puede acceder a los datos, mientras que la configuración de la propiedad en nulo desencadena reevaluaciones que resultan en un enjambre decannot read property x of null.

La lógica simple sugiere que esto no debería suceder. Así que pensé que tal vez el problema es que el orden de las evaluaciones de enlace es incorrecto, lo que resulta en que los enlaces del elemento se evalúen antes de que se desactive el cargador. Así que intenté eliminar el enlace paraactive y configurándolo manualmente. Sin embargo, el problema persistió.

Así que aquí hay una representación mínima para ilustrar lo que está sucediendo:

Window {
  id: main
  visible: true
  width: 500
  height: 300

  property QtObject object : QtObject {
    property QtObject subObject: null
  }

  QtObject {
    id: subo
    property int i : 1
  }

  Loader {
    id: ld
    active: false
    sourceComponent: Text {
      text: object.subObject.i
      font.pointSize: 20
    }
  }

  MouseArea {
    anchors.fill: parent
    onClicked: {
      if (object.subObject) {
        ld.active = false
        object.subObject = null
      } else {
        object.subObject = subo
        ld.active = true
      }
    }
  }
}

Tenga en cuenta que en este caso el cargador está desactivado explícitamenteantes de la propiedad se establece ennullSin embargo, cada vez que esto sucede, aparece un error de tipo en la consola:

qrc:/main.qml:25: TypeError: Cannot read property 'i' of null

Esto no parece un comportamiento correcto. Entonces, ¿tal vez un error? ¿O me estoy perdiendo algo? ¿Alguna sugerencia sobre cómo solucionar esa limitación? Tenga en cuenta que esto se evita de alguna manera cuando se utilizan vistas o repetidores.

Actualización: para aclarar más, en mi código de producción real, el elemento del cargador no puede existir realmente sin hacer referencia a esa propiedad. Entonces, la idea era que el objeto solo debería crearse cuando la propiedad tiene un valor distinto denull y ser destruido cuando esnull.

Respuestas a la pregunta(4)

Su respuesta a la pregunta