Definir Loader.active como false não libera o item imediatamente

Eu tenho um caso de uso em que, dependendo da presença ou ausência de um valor de propriedade, um objeto que faz referência a ele é criado ou removido. Estou usando umLoader para o efeito, onde oactive A propriedade está vinculada à propriedade, ou seja, quando a propriedade possui um valor não nulo, o carregador é ativado, quando é definido como nulo, é desativado.

No entanto, o problema é que o carregador não libera seu item imediatamente; portanto, por um momento, o item faz referência a uma propriedade nula, portanto, é incapaz de acessar dados, enquanto a configuração da propriedade como nula aciona reavaliações que resultam em um enxame de itens.cannot read property x of null.

A lógica simples sugere que isso não deveria acontecer. Por isso, pensei que talvez o problema esteja na ordem das avaliações de ligação estar incorretas, resultando na avaliação das ligações do item antes da desativação do carregador. Então eu tentei remover a ligação paraactive e configurando-o manualmente. O problema persistiu.

Então, aqui está uma representação mínima para ilustrar o que está acontecendo:

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
      }
    }
  }
}

Observe que, neste caso, o carregador é desativado explicitamenteantes a propriedade está configurada paranull, no entanto, toda vez que isso acontece, recebo um erro de tipo no console:

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

Isso não parece um comportamento correto. Então, talvez um bug? Ou eu estou esquecendo de alguma coisa? Alguma sugestão sobre como contornar essa limitação? Observe que isso é evitado de alguma forma ao usar visualizações ou repetidores.

Atualização: para esclarecer mais, no meu código de produção real, o item do carregador não pode realmente existir sem fazer referência a essa propriedade. Portanto, a ideia era que o objeto só fosse criado quando a propriedade tivesse um valor diferente denull e ser destruído quando énull.

questionAnswers(4)

yourAnswerToTheQuestion