2012-03-09 68 views
1

我遇到了Script#的問題。我有一個加載JavaScript文件並使用對象的ASP.NET頁面。如何在腳本中使用其他JS文件中定義的對象#

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

現在我還有一個Script#生成的JavaScript文件,它也包含在同一頁面中。現在我想使用該腳本#.cs文件中的tracker對象。

Type.InvokeMethod(tracker, "trackPageView"); 

不編譯:在當前上下文

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

編譯,但輸出不存在:「tracker'.trackPageView();

任何想法?

回答

-1

已經發現:Script.Literal("tracker.trackPageView()");

+0

Script.Literal是最後的手段......並且真的是臨時的解決方法,因爲你失去了用c#編寫的許多好處。將其標記爲有更好的答案,顯示如何編寫導入定義而不是這個,這是公認的答案。 – 2012-05-22 21:31:21

4

當試圖發出代碼第三方JavaScript庫,使用Script.Literal工作,但平時應避免。使用Script#的重點在於讓您獲得編譯器支持,並輕鬆重構。

如果您打算在其他項目中使用Piwik,我建議在您的Script#庫中創建一些新類,甚至是單獨的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 
+0

神奇的方法,做得很好。 – Zoidberg 2012-03-20 18:16:55

相關問題