Я пытаюсь создать шаблон, который имеет некоторые значения по умолчанию, но они должны быть переопределены, если предоставляется файл пользовательских значений.Проблема в том, что некоторые из моих переменных в объекте построены из других переменных в том же объекте, например adjective: 'Good' + self.fruit
.Это не переопределяется.
std.mergePatch
не дает ожидаемого результата, потому что рендерит весь объект (который уже сделал нас из self.fruit
к настоящему времени), а затем переопределяет fruit
.
local myobj = {
adjective: 'Good ' + self.fruit.name,
fruit: {
name: 'apple',
qty: 1
},
};
myobj
дает правильный результат, когда ничего не переопределяется:
{
"adjective": "Good apple",
"fruit": {
"name": "apple",
"qty": 1
}
}
Но когда я пытаюсь переопределить его с другой переменной, он все равно принимает значение по умолчанию, если я использую std.mergePatch
следующим образом:
local config = {
fruit: {
name: 'banana',
size: 'large',
},
};
local myobj = {
adjective: 'Good ' + self.fruit.name,
fruit: {
name: 'apple',
qty: 1
},
};
std.mergePatch(myobj, config)
Производит (обратите внимание на неправильное название фрукта в adjective
):
{
"adjective": "Good apple",
"fruit": {
"name": "banana",
"qty": 1,
"size": "large"
}
}
И если я непосредственно добавлю два объекта, он пропустит дополнительную информацию:
local config = {
fruit: {
name: 'banana',
size: 'large',
},
};
local myobj = {
adjective: 'Good ' + self.fruit.name,
fruit: {
name: 'apple',
qty: 1
},
};
myobj + config
Производит (обратите внимание на отсутствующее значение по умолчанию qty: 1
):
{
"adjective": "Good banana",
"fruit": {
"name": "banana",
"size": "large"
}
}
Как этого добиться с помощью Jsonnet?