Лучшая практика для сопоставления миксина в библиотеке импорта Script # - PullRequest
1 голос
/ 27 сентября 2011

Каков рекомендуемый способ сопоставления Javascript Mixin в библиотеке импорта Script #?

Для примера: это qooxdoo api

http://demo.qooxdoo.org/1.5.x/apiviewer/#qx.core.Object

Реализует этот миксин

http://demo.qooxdoo.org/1.5.x/apiviewer/#qx.data.MBinding

Как мне отобразить это в C #? Методы расширения? Интерфейсы?

1 Ответ

0 голосов
/ 30 сентября 2011

Если вы ознакомитесь с исходными текстами сценариев # на github, вы увидите примеры того, как это сделать в мире jQuery.

Ответ зависит от того, пытаетесь ли вы просто импортировать существующий скрипт или хотите использовать скрипт # для создания самого миксина.

Если вы хотите просто импортировать, я рекомендую вам проверить в исходном коде проекты jQuery и jQuery.History . jQuery.History представляет миксин истории jQuery (но делает это без каких-либо методов расширения или интерфейсов).

Если вы хотите создать миксин в script #, читайте дальше ... высокоуровневый подход - определить статический класс и аннотировать его атрибутом [Mixin]. В будущем подход изменится на использование методов расширения c #, но этот пользовательский подход - то, что вам нужно на данный момент.

Вернуться к образцу - на https://github.com/nikhilk/scriptsharp/blob/master/samples/PhotoDemo/Gallery/GalleryPlugin.cs вы увидите:

[Mixin("$.fn")]
public static class GalleryPlugin {

    public static jQueryObject Gallery(GalleryPluginOptions customOptions) {
        ...
        // Use jQuery.Current to access the "this" object at runtime pointing
        // to the object instance whose prototype now contains the mixin methods.
    }
}

Это будет сгенерировано в скрипт как:

$.fn.gallery = function(customOptions) {
}

Для справки, способ определения jQuery.Current во встроенной библиотеке jQuery (полный исходный код см. https://github.com/nikhilk/scriptsharp/blob/master/src/Libraries/jQuery/jQuery.Core/jQuery.cs):

[IgnoreNamespace]
[Imported]
[ScriptName("$")]
public sealed class jQuery {

    private jQuery() {
    }

    [ScriptAlias("this")]
    [IntrinsicProperty]
    public static jQueryObject Current {
        get {
            return null;
        }
    }
}

Немного запутано, но, надеюсь, как только вы попробуете это, оно станет простым. Готовый скрипт # предоставляет API и шаблоны для сценариев jQuery, которые упрощают задачу, удаляя механику с переднего плана, что вам необходимо понять при работе с другой средой сценариев.

Надеюсь, это поможет!

...