Ok, więc po pierwsze tu jest mój bardzo prosty plugin jQueryKonwersja plugin jQuery maszynopis
(function ($){
$.fn.greenify = function (options) {
var settings = $.extend({
// These are the defaults
color: '#556b2f',
backgroundColor: 'white'
}, options);
}(jQuery));
$('a').greenify({
color: 'orange'
}).showLinkLocation();
Zasadniczo to wszystko nie jest zmienić kolor tekstu i tła-kolor z dostarczonego elementu. Teraz staram się przekonwertować tę prostą wtyczkę na TypeScript
Próbowałem kilku rzeczy, a najbliższe było to.
maszynopis
/// <reference path="../../typings/jquery/jquery.d.ts" />
module Coloring
{
interface IGreenifyOptions
{
color: string;
backgroundColor: string;
}
export class GreenifyOptions implements IGreenifyOptions
{
// Fields
color: string;
backgroundColor: string;
constructor(color: string, backgroundColor: string)
{
this.color = color;
this.backgroundColor = backgroundColor;
}
}
export class Greenify
{
// Fields
element: JQuery;
options: GreenifyOptions;
constructor(element: JQuery, options: GreenifyOptions)
{
this.element = element;
this.options = options;
this.OnCreate();
}
OnCreate()
{
this.element.css('color', this.options.color).css('background-color', this.options.backgroundColor);
}
}
}
JQuery, który nazywa go
$(function()
{
var options: Coloring.GreenifyOptions = new Coloring.GreenifyOptions('#0F0', '#000');
var $elems = $('a');
$elems.each(function()
{
var result = new Coloring.Greenify($(this), options)
});
});
Jednak nie chcę, aby zapewnić element jak wyżej new Coloring.Greenify($(this), options)
, ja po prostu chcę zrobić coś takiego
$('a').Coloring.Greenify(options);
lub
$('a').Coloring.Greenify(Coloring.GreenifyOptions()
{
color: '#F0F',
backgroundColor: '#FFF'
});
Ale nie mogę sobie wyobrazić, jak powiedzieć TypeScript, że element, do którego jest on podłączony, to element Jquery
. Czy ktokolwiek mógłby oświetlić to, żeby mi pomóc?
P.S. powyższe mam działa dobrze, po prostu chcę zmienić kod wywołujący.
Aktualizacja
To jest to, co mam w tej chwili i to działa
maszynopis interfejsu JQuery { Greenify(); Greenify (opcje: Coloring.GreenifyOptions); }
(function ($)
{
$.fn.Greenify = function (options)
{
return new Coloring.Greenify(this, options);
}
})(jQuery);
jQuery var $ elems = $ ('a') Greenify (opcje).;
Jednakże oznacza to, że muszę podać opcje, a jeśli wykonam konstruktor bez opcji, otrzymam opcje nieokreślone. Odpowiedź, którą zakomentowałem jako poprawną, jest poprawna w odniesieniu do pytania, które zadałem. Jednak po prostu pamiętać, że odpowiedź warunkiem wymaganym podać opcje do swojego konstruktora maszynopis, idę zobaczyć, w jaki sposób mają domyślne opcje, a następnie zastąpić je w konstruktorze, ale to inna kwestia :)
Aktualizacja 2
Po prostu, aby wszyscy wiedzieli, że znalazłem sposób na udostępnienie opcji wtyczki.
Co można zrobić to
klasa maszynopis
export class Greenify
{
// Default Options
static defaultOptions: IGreenifyOptions =
{
color: '#F00',
backgroundColor: '#00F'
};
// Fields
element: JQuery;
options: GreenifyOptions;
constructor(element: JQuery, options: GreenifyOptions)
{
// Merge options
var mergedOptions: GreenifyOptions = $.extend(Greenify.defaultOptions, options);
this.options = mergedOptions;
this.element = element;
this.OnCreate();
}
OnCreate()
{
this.element.css('color', this.options.color).css('background-color', this.options.backgroundColor);
}
}
Interfejs maszynopis
interface JQuery
{
Greenofy();
Greenify(obj?: any);
Greenify(options?: Coloring.GreenifyOptions);
}
(function ($)
{
$.fn.Greenify = function (options)
{
return new Coloring.Greenify(this, options);
}
})(jQuery);
kod jQuery do wywołania wtyczki z jedną opcjonalną możliwością
$(function()
{
var $elems = $('a').Greenify(<Coloring.GreenifyOptions>{
color: '#00F'
});
});
W związku z tym wynik nie spowoduje, że kotwica będzie miała kolor tła "# 00F", który jest domyślny, a opcja, którą podałem, sprawi, że tekst kotwicy będzie miał kolor "# 00F".
Mam nadzieję, że to pomoże nikomu, że jest ten sam problem jak ja :)
To jest to, co mam w tej chwili, jednak oznacza to, że muszę podać opcje, ale co jeśli chciałbym użyć domyślnych opcji? – Canvas
Czy wtyczka jquery na górze twojego pytania nie obsługuje już domyślnych ustawień? jeśli są to domyślne wartości, to powinno być wystarczająco proste, aby dodać kolejną definicję do interfejsu. Zobacz moją aktualizację – jsonmurphy
Tak, ale na przykład powiedzmy, że chcemy zmienić kolor tła, ale nie kolor, jak to zrobić w konstruktorze? – Canvas