【问题标题】:Can I override document.ready in typescript我可以在打字稿中覆盖 document.ready
【发布时间】:2013-03-13 16:58:14
【问题描述】:

我有一个应用程序,它有不同的页面,并且大致每个页面都有它自己的 js(由 typescript 编译器生成)。每个页面的 document.ready 方法都有一些共享属性,我希望将共享函数/属性放入一个基本的打字稿类。

所以它应该看起来像

 class PageX extends BasePage
    {
        onLoad => which should act like document.ready
    }

这可以吗?不知道有没有可能?

【问题讨论】:

  • 你试过看看会发生什么吗?
  • 我不知道该怎么做。 TypeScript 生成以下代码,仅用于定义页面类 var Page = (function () { function Page() { } return Page; })();所以我正在寻找的是没有在每个页面上编写 document.ready - 当它完成加载和使用 DOM 时应该调用这个类的一个方法。

标签: jquery onload typescript document-ready onload-event


【解决方案1】:

如果您希望每个页面都包含基本功能,那么您需要在每个页面中包含基本脚本。派生类不会将父功能复制到子功能中。

您可以在包含常见行为和属性的 .ts 文件中拥有一个 PageBase 类,然后从该类中派生出每个页面特定行为的类。类似于以下内容:

// Base.ts
class PageBase {
  commonProperty: any;

  constructor(doc:HTMLDocument){
    doc.onload = function(){
      alert('Common code here');
    }
  }
}

上面的编译输出 (base.js) 将通过每个页面上的脚本标记包含在内,然后是每个页面生成的脚本...

// pageX.ts

/// <reference path="Base.ts"/>
class PageX extends PageBase {
  constructor(){
    super(window.document);
    // Rest of my code here...
  }
}

这听起来像是你在追求什么吗?

【讨论】:

  • 是的,这听起来很对。我遇到的更好的方法是调用 $(document).ready(this.customMethod);在构造函数中,它允许您在继承的类中自定义 customMethod 代码。
【解决方案2】:

我认为逻辑不属于一个类。

但是如果你在 .ts 文件的顶部声明一个函数 var 并从你的外部 doc.ready 中调用它,你可以在类实例中监听该函数的变化..

Function listener in javascript and/or jQuery

Listen to state and function invocations

【讨论】:

  • 如果一个类充当视图控制器,那么该逻辑很可能属于那里。
猜你喜欢
  • 2020-05-19
  • 2020-12-22
  • 2020-10-27
  • 2020-01-14
  • 2017-10-07
  • 2020-05-26
  • 1970-01-01
  • 1970-01-01
  • 2016-10-08
相关资源
最近更新 更多