如果不是主要请求,则在`doJavaScript`之前未加载库

时间:2019-12-20 22:48:19

标签: wt

在使用require加载库时,当未通过第一个请求加载内容时,在加载库后,不会延迟javascript代码的执行。

wApp->require("myLibrary.js"); // defines function MyFunction ();
doJavaScript ("MyFunction ();");

此代码在第一个加载的页面上被请求时运行,但没有错误,但是在单击按钮后加载内容时,发生以下javascript错误:

  

未定义MyFunction

我应该如何克服这个问题?

进一步的研究

检查WebRenderer::collectJS的源代码:

似乎在加载新库之前执行了Javascript更新:

// Executing javascript updates, including doJavaScript calls.
for (unsigned i = 0; i < changes.size(); ++i) {
  changes[i]->asJavaScript(sout, DomElement::Priority::Update);
  delete changes[i];
}

...

// Loading new libraries.
int librariesLoaded = loadScriptLibraries(*js, app);

在加载新库之前,是否应该延迟javascript更新?

2 个答案:

答案 0 :(得分:0)

我不确定javascript scriploader的行为。但是根据我的wt经验,我以这种方式添加它。

1)我的javascript库从require开头加载到我的主页中。

2)如果以后需要一些新功能,可以将其写在我的脚本字符串中:

<div class="container">
  <div class="row">
    <div class="col-md-2">
      APP ICON 1
    </div>
    <div class="col-md-2">
      APP ICON 2
    </div>
    <div class="col-md-2">
      APP ICON 3
    </div>
    <div class="col-md-2">
      APP ICON 4
    </div>
    <div class="col-md-2">
      APP ICON 5
    </div>
    <div class="col-md-2">
      APP ICON 6
    </div>
  </div> <!-- End of Row 1 -->
  <div class="row">
    <div class="col-md-2">
      APP ICON 1
    </div>
    <div class="col-md-2">
      APP ICON 2
    </div>
    <div class="col-md-2">
      APP ICON 3
    </div>
    <div class="col-md-2">
      APP ICON 4
    </div>
    <div class="col-md-2">
      APP ICON 5
    </div>
    <div class="col-md-2">
      APP ICON 6
    </div>
  </div> <!-- End of Row 2 -->
</div>

答案 1 :(得分:0)

如果要加载一些javascript文件并在加载后运行某些功能,则应在容器类的构造函数中进行要求。

然后您派生了函数bool Wt :: WCompositeWidget :: loaded()
并在此函数中添加您的dojavaScript ...