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

时间:2012-03-09 09:40:57

标签: javascript script#

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

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

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

Type.InvokeMethod(tracker, "trackPageView");

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

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

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

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

当尝试为第三方javascript库发出代码时,使用Script.Literal会起作用但通常应该避免。使用Script#的重点是获得编译器支持,并且易于重构。

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

关键是用属性[Imported]标记这些类 - 这个属性将阻止为类创建一个js文件,但会给你所有强大的输入和重构的好处,使脚本#太棒了。

我不确定“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;
    }


}

您现在可以在脚本#

中编写这样的代码
Tracker tracker = Piwik.GetTracker("whatever");//c#

它会发出看起来像这样的javascript。

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

答案 1 :(得分:-1)

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