如何在Script#中使用其他JS文件中定义的对象

How to use object defined in other JS file in Script#

本文关键字:文件 JS 定义 对象 其他 Script#      更新时间:2023-09-26

我的Script#有问题。我得到了一个ASP.NET页面,它加载了一个JavaScript文件并使用了其中的一个对象。

var tracker = Piwik.getTracker(...);

现在我还有一个Script#生成的JavaScript文件,它也包含在同一页面中。现在我想在Script#.cs文件中使用tracker对象。

Type.InvokeMethod(tracker, "trackPageView");

不编译:在当前上下文中不存在

Type.InvokeMethod("tracker", "trackPageView");

编译但输出:"tracker".trackPageView();

有什么想法吗?

当尝试为第三方javascript库发出代码时,使用Script.Literal可以工作,但通常应该避免。使用Script#的全部目的是为了获得编译器支持和轻松的重构。

如果您计划在其他项目中使用Piwik,我建议您在Script#库中创建一些新类,甚至创建一个单独的Script#导入库。

关键是用属性[Imported]标记这些类-该属性将阻止为这些类创建js文件,但将为您提供强大的类型和重构功能,使script#如此出色。

我不确定"Piwik"是什么,但我认为它是javascript库中的Singleton对象。创建以下两个类。

[Imported]//we don't want this to show up in the javascript source.
public sealed class Tracker
{
    public void TrackElement()//this will write trackElement() in emitted js.
    {
    }

}

[Imported]//we don't want this to show up in the javascript source.
public static class Piwik
{
    public static Tracker GetTracker(string item)//this becomes getTracker()
    {
        return null;
    }

}

您现在可以在Script#中编写这样的代码

Tracker tracker = Piwik.GetTracker("whatever");//c#

它将发出如下所示的javascript。

var tracker = Piwik.getTracker('whatever');//javascript

已找到:Script.Literal("tracker.trackPageView()");