【问题标题】:App Lab's readRecords() changes elements' idsApp Lab 的 readRecords() 更改元素的 ID
【发布时间】:2021-06-12 13:27:32
【问题描述】:

我正在 AppLab 中制作童话故事。我使用了一个我称之为“故事”的数据库,其中包含故事事件以及游戏是否开始(我还没有制作游戏)。无论如何,我必须从数据库中readRecords()事件,并在回调函数中创建一个textLabel(我无法创建textAreas,但如果我错了请纠正我)。对于每个 textLabel,都应该有一个唯一的 ID:"event"+scrN。如果我运行我的整个函数一次,一切都会按预期运行,但如果我运行两次,它会显示WARNING: Line: 10: The textLabel() id parameter refers to an id ("event2") which already exists.,尽管第一个元素应该是“event1”。我输入了console.log(textID),它打印了两次“event2”。如果你不明白我的意思,这里是代码:

var scr = "screen";
var scrN = 0;
var maxWidth = 320;
var maxHeight = 450;
function create(widType, id, text, x, y, width, height) {
  if (widType === "button") {
    button(id, text);
  }
  else if (widType === "text") {
    textLabel(id, text);
  }
  setProperty(id, "x", x);
  setProperty(id, "y", y);
  setProperty(id, "width", width);
  setProperty(id, "height", height);
  if (widType === "text") {
    setProperty(id, "background-color", rgb(0,0,0,0));
    setProperty(id, "border-color", rgb(0,0,0,0));
    setProperty(id, "text-color", rgb(0,0,0));
    setProperty(id, "font-size", 17.5);
  }
  else if (widType === "button") {
    setProperty(id, "text-color", rgb(0,0,0));
    setProperty(id, "font-size", 16);
  }
}

function screenChange(dir) {
  if (dir === "NEXT") {
    scrN++;
  }
  else if (dir === "BACK") {
    scrN--;
  }
  if (dir === "NEXT") {
    setScreen(scr+scrN);
    var buttonWidth = 80;
    var buttonHeight = 40;
    var next = "Next";
    var nextID = next.toLowerCase()+scrN;
    var nextx = 220;
    var nexty = 400;
    create("button", nextID, next,
    nextx, nexty, buttonWidth, buttonHeight);
    var back = "Back";
    var backID = back.toLowerCase()+scrN;
    var backx = -80;
    var backy = nexty;
    create("button", backID, back,
    backx, backy, buttonWidth, buttonHeight);
    readRecords("story", {}, function(records) {
      var textID = "event"+scrN;
      console.log(textID);
      create("text", textID, records[scrN-1].event,
      0, -50, maxWidth, 90);
    });
  }
}
screenChange("NEXT");
screenChange("NEXT");

我需要帮助! readRecords 函数是否更改了 main 函数过去调用的 textID 变量?如果是这样,我该怎么办?谢谢

【问题讨论】:

  • 你用"NEXT"dir调用了screenChange()函数两次,这意味着scrN将被添加两次。因此下一次迭代的结果将是2。我不确定您为什么调用该函数两次,但请尝试删除其中一个调用
  • @Elitezen,我调用该函数两次的原因是,如果我多次调用它,我需要测试它是否有效,以便我可以创建这样的童话

标签: javascript database code.org app-lab


【解决方案1】:

您可以在“设计”选项卡中创建文本区域。您还可以使用 setParent() 块将每个元素作为文本区域的父级。

setParent(id, parentId);

要清除文本区域并添加新元素,只需将文本区域的文本设置为“”即可。

【讨论】:

    猜你喜欢
    • 2017-05-22
    • 2010-09-25
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多