如何检测 JSON 对象内的变化?

How to detect change within JSON object?

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.0

Window {
    visible: true
    width: 640
    height: 480

    property var json: {
        "name": "old"
    }

    Component.onCompleted: json.name = "new"

    onJsonChanged: console.log("Changed to : " + json.name)

    Button {
        onClicked: console.log("Button clicked: " + json.name)
    }
}
qml: Changed to : old

但我希望输出为:

qml: Changed to : old
qml: Changed to : new

QML 识别 onJsonChanged: 信号没有问题,但信号实际上似乎没有激活。我知道 json.name 正在成功更改,因为我在运行时进行了调试并看到它具有新值。那么为什么信号没有激活,and/or我如何检测json对象的变化?

与 X 属性 关联的信号在对象更改时发出,在您的情况下,更改某些内部属性不会更改对象(内存 space)只会修改内部属性。要验证这一点,您可以将示例修改为:

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.0

Window {
    visible: true
    width: 640
    height: 480

    property var json: {
        "name": "bar"
    }

    Component.onCompleted: json = {"name3": "foo"}

    onJsonChanged: console.log("Changed to : " + json)

    Button {
        onClicked: console.log("Button clicked: " + json)
    }
}

获得如下:

qml: Changed to : [object Object]
qml: Changed to : [object Object]