自定义元素升级后如何执行脚本

米尔德里德

我已经定义了一个自定义元素,并且只想在该自定义元素升级到其注册类型时才执行脚本。用例是我必须调用自定义方法。

我的主要html文件如下所示:

<project-list></project-list>
<script>
    var project_list = document.getElementsByTagName("project-list")[0]
    project_list.custom_method("some_data");
</script>

定制元素在HTML导入中注册,如下所示:

<script>
  "use strict";
  var currentScript = document._currentScript || document.currentScript;

  class ProjectList extends HTMLElement {

    createdCallback(){
      console.log("created");
    }

    custom_method(data) {
      console.log("custom_method() OK");
      console.log(data);

      this.innerHTML = data;
    }

  }

  document.registerElement("project-list", ProjectList);
</script>

我的问题很简单:如何确保仅在自定义元素获得其custom_method方法之后才在主html文件中调用脚本

我正在寻找一种优雅的解决方案。规范作者可能会想到的东西。我不介意更改架构(例如,如有必要,例如将javascript从主文件移动到另一个自定义元素)。

超锐利

同步HTML导入

正如@dandavis所建议的那样,由于and元素sync默认行为,您只需要按正确的顺序放置标签即可:在方法调用之前进行注册。<link><script>

或者,您可以在触发DOMContentLoadedwindow.onload事件时调用自定义方法,如下所示:

window.onload = function() 
{
    var project_list = document.getElementsByTagName("project-list")[0]
    project_list.custom_method("some_data")     
}
<project-list></project-list>

<script>
  "use strict";
  var currentScript = document._currentScript || document.currentScript;

  class ProjectList extends HTMLElement {

    createdCallback(){
      console.log("created");
    }

    custom_method(data) {
      console.log("custom_method() OK");
      console.log(data);

      this.innerHTML = data;
    }

  }

  document.registerElement("project-list", ProjectList);
</script>

异步HTML导入

如果出于某些原因要异步加载HTML导入文件,则可以等待link.onload事件。此时| <script>内部导入已被执行,自定义元素已注册并创建。

<html>
<head>
  <title></title>
    <meta charset="utf-8" />
    <link rel="import" href="projectList.html" id="projectList" async>
    <script>
    projectList.onload = function ()
    {
      console.log( "import {loaded}" )
      var project_list = document.getElementsByTagName( "project-list" )[0]
      project_list.custom_method("some_data")
    } 
    </script>
</head>
<body>
    <project-list id="pl"></project-list>
    <script>
        console.warn( "custom_method is " + pl.custom_method ) //undefined
    </script>
</body>
</html>

使用WebComponents.js polyfill

在这种情况下,polyfill不会在加载导入后立即实例化创建的对象。相反,您应该听WebComponentsReady事件:

document.addEventListener( "WebComponentsReady", function ()
{
    console.log( "WebComponentsReady" )
    var project_list = document.getElementsByTagName( "project-list" )[0]
    project_list.custom_method( "some_data" )
} )

它适用于Firefox,IE 11和Chrome。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何创建自定义终端命令(以运行脚本)?

来自分类Dev

如何创建自定义终端命令(以运行脚本)?

来自分类Dev

如何设置自定义按键绑定以在Atom编辑器中运行脚本或执行命令?

来自分类Dev

连接接口后执行自定义脚本

来自分类Dev

如何在任务完成后提示自定义脚本的执行

来自分类Dev

下载后如何执行脚本?

来自分类Dev

下载后如何执行脚本?

来自分类Dev

如何在bash脚本中执行自定义命令

来自分类Dev

Internet重新连接时如何执行自定义脚本?

来自分类Dev

如何使自定义zsh脚本自动可执行?

来自分类Dev

如何找到自定义脚本执行的来源?

来自分类Dev

自定义元素中的脚本标签

来自分类Dev

在一定时间间隔后如何执行脚本

来自分类Dev

执行脚本后如何使groovysh进入交互模式?

来自分类Dev

仅在按钮onclick后如何执行脚本?

来自分类Dev

在一定时间间隔后如何执行脚本

来自分类Dev

准备执行脚本后,如何播放声音?

来自分类Dev

在系统重启后如何使用kickstart执行脚本

来自分类Dev

在ng-repeat完成渲染元素后执行自定义操作

来自分类Dev

升级EaselJS后自定义光标不起作用

来自分类Dev

自定义元素*及其子元素*初始化后如何获取回调

来自分类Dev

执行脚本时,TFS构建定义部署后的脚本错误

来自分类Dev

如何从自定义任务执行runMain?

来自分类Dev

我如何执行自定义ResourceInitializer

来自分类Dev

如何使用自定义命令从命令行执行python脚本?

来自分类Dev

如何使用自定义命令从命令行执行python脚本?

来自分类Dev

如何执行一些自定义 bash 脚本命令?

来自分类Dev

如何直接用名称调用终端中的自定义可执行文件或脚本?

来自分类Dev

ntpd同步后执行脚本

Related 相关文章

  1. 1

    如何创建自定义终端命令(以运行脚本)?

  2. 2

    如何创建自定义终端命令(以运行脚本)?

  3. 3

    如何设置自定义按键绑定以在Atom编辑器中运行脚本或执行命令?

  4. 4

    连接接口后执行自定义脚本

  5. 5

    如何在任务完成后提示自定义脚本的执行

  6. 6

    下载后如何执行脚本?

  7. 7

    下载后如何执行脚本?

  8. 8

    如何在bash脚本中执行自定义命令

  9. 9

    Internet重新连接时如何执行自定义脚本?

  10. 10

    如何使自定义zsh脚本自动可执行?

  11. 11

    如何找到自定义脚本执行的来源?

  12. 12

    自定义元素中的脚本标签

  13. 13

    在一定时间间隔后如何执行脚本

  14. 14

    执行脚本后如何使groovysh进入交互模式?

  15. 15

    仅在按钮onclick后如何执行脚本?

  16. 16

    在一定时间间隔后如何执行脚本

  17. 17

    准备执行脚本后,如何播放声音?

  18. 18

    在系统重启后如何使用kickstart执行脚本

  19. 19

    在ng-repeat完成渲染元素后执行自定义操作

  20. 20

    升级EaselJS后自定义光标不起作用

  21. 21

    自定义元素*及其子元素*初始化后如何获取回调

  22. 22

    执行脚本时,TFS构建定义部署后的脚本错误

  23. 23

    如何从自定义任务执行runMain?

  24. 24

    我如何执行自定义ResourceInitializer

  25. 25

    如何使用自定义命令从命令行执行python脚本?

  26. 26

    如何使用自定义命令从命令行执行python脚本?

  27. 27

    如何执行一些自定义 bash 脚本命令?

  28. 28

    如何直接用名称调用终端中的自定义可执行文件或脚本?

  29. 29

    ntpd同步后执行脚本

热门标签

归档