我正在使用 Desmos API 来可视化我正在测试的应用程序中的一些数据。我有相当多的公式想要进行有意义的分组,并且我知道在 UI 中我可以使用文件夹来实现这一点。
setExpression
可以采用 type
属性,但声称它只能是 expression
(这是默认值)或 table
– 尽管进一步往下看,很明显它也可以是text
。
我已经成功地用
setExpression({ type: 'folder' })
创建了一个文件夹,所以这显然也有效;但我无法重命名文件夹(name
、text
、title
和folderName
都没有效果,它仍然是“无标题文件夹”),而且我不知道如何也可以将其他表达式放入其中。
我还使用 UI 将这些东西放入我想要的状态,并使用
getState()
抓取它们 – 它们看起来部分像这样:
"expressions": {
"list": [
{
"type": "folder",
"id": "gradients",
"title": "Gradients" // This is significant
},
{
"type": "expression",
"id": "gradient",
"folderId": "gradients", // This is significant
"color": "#2d70b3",
"latex": "\\Delta=y_1\\left[1...\\right]-y_1\\left[0...\\right]",
"hidden": true
}, // ...
...但是使用
setExpression()
设置这些值也没有达到预期的效果。
谷歌没有帮助。这个社区能应对挑战吗?
正如您所说,没有办法直接从 setExpression 修改文件夹,但您可以使用 setState() 和 getState()。我直接通过控制台运行它,但是,它应该与 API 类似。这是一个可以修改文件夹标题的函数
function SetfolderTitle(id, title){
let state = Calc.getState();
for (var i in state.expressions.list){
if(state.expressions.list[i].id == id){
state.expressions.list[i].title = title
break;
}
}
Calc.setState(state)
}
至于给它添加一个表达式,你可以做类似的事情:
function AddExpression(FolderId, id){
let state = Calc.getState();
for (var i in state.expressions.list){
if(state.expressions.list[i].id == id){
state.expressions.list[i]["folderId"] = FolderId
break;
}
}
Calc.setState(state)
}
可能有更简单的方法可以做到这一点,但我对 Javascript 很糟糕。