Как использовать объект, определенный в другом файле JS в Script # - PullRequest
1 голос
/ 09 марта 2012

У меня проблемы со скриптом #. Я получил страницу ASP.NET, которая загружает файл JavaScript и использует оттуда объект.

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

Теперь у меня также есть сгенерированный Script # файл JavaScript, который также включен в ту же страницу. Теперь я хочу использовать объект tracker в этом файле Script # .cs.

Type.InvokeMethod(tracker, "trackPageView");

Не компилируется: не существует в текущем контексте

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

Компилирует, но выводит: 'tracker'.trackPageView ();

Есть идеи?

Ответы [ 2 ]

4 голосов
/ 11 марта 2012

При попытке испустить код для сторонней библиотеки javascript, использование Script.Literal будет работать, но обычно этого следует избегать.Смысл использования Script # заключается в том, что вы получаете поддержку компилятора и простой рефакторинг.

Я бы порекомендовал создать несколько новых классов в вашей библиотеке Script # или даже отдельной библиотеке Script # Import, если вы планируете использовать Piwikв других проектах.

Ключ в том, чтобы пометить эти классы атрибутом [Imported] - Этот атрибут предотвратит создание файла js для классов, но даст вам все сильные качества печати и рефакторинга, которые делаютscript # так замечательно.

Я не уверен, что такое "Piwik", но я предполагаю, что это объект Singleton в библиотеке javascript.Создайте следующие два класса.

[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
0 голосов
/ 09 марта 2012

Уже нашли: Script.Literal("tracker.trackPageView()");

...