Bootstrap Chameleon Logo

External Json

The Chameleon UI .json file can reference other json files.

在之前的介绍Buttons中,我们提到过,使用外部的json文件来引入按钮的代码。这样重用代码。

ExternalJson

TIP
嵌套引入也是支持的,但是需要避免循环引用

TIP
Nested references are supported, but circular references need to be avoided

例如下面的JSON文件,实际等于将:"ZeldaWorldMapEditor_Buttons.json"文件中的内容完全拷贝并替换:"ExternalJson": "ZeldaWorldMapEditor_Buttons.json"

{
    "autoWidth": true,
    "SBox": {
        "WidthOverride": 480,
        "Content": {
            "ExternalJson": "ZeldaWorldMapEditor_Buttons.json"
        }
    }
}

由于是文本替换,因此只需保证替换后的JSON文件是合法的即可。

多次引入

此外,也可以对一个ExternalJson进行多次引入,这样可以在不同的位置使用同一个ExternalJson,例如:

"SBorder": {
    "BorderImage": {
        "Style": "FEditorStyle",
        "Brush": "ToolPanel.DarkGroupBorder"
    },
    "Content":{
        "SVerticalBox":
        {
            "Slots": [
                {
                    "ExternalJson": "ZeldaWorldMapEditor_Buttons.json"
                },
                {
                    "ExternalJson": "ZeldaWorldMapEditor_Buttons.json"
                },
                {
                    "ExternalJson": "ZeldaWorldMapEditor_Buttons.json"
                }
            ]
        }
    }
}

这样我们就可以避免在多个地方重复写同样的代码。

区分按钮点击事件

当我需要区分SButton按钮的点击事件具体来自哪个按钮时,我们可以通过变量占位符:*%widgetPath*来获取。具体可见SButton OnClick

NOTE
现在*%widgetPath*只支持SButton控件

小结

pros:

  • 减少单个json文件的复杂度和大小
  • 复用部分UI代码

  • Reduce the complexity and size of a single json file

  • reuse part ui code

cons:

  • UI json文件变得不太直观,不太容易理解

- 控制台中显示的Widget路径和PyCharm中显示的Json路径不一致,PyCharm不知道这里引入了另一个json文件。

  • The UI json files becomes less intuitive and more obscure
  • The Widget path logged in the console window is not the same as the Json crumb path shown in PyCharm. As PyCharm don't know that another json content has being "import" here.

recommendation

建议

- 将重复的UI代码(例如16x16的地图按钮)或者其他脚本生成的UI代码放到一个"外部"json文件中。

  • Put the repetitive ui code (such as 16x16 map buttons) or the ui code which generated by other script into an "external" json file.