Как вызвать функции, которые вкладываются в Плагине JQuery?

Если вы пытаетесь центрировать текст на TableRow в TableLayout, вот как я этого добился:

<TableRow android:id="@+id/rowName"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:padding="5dip" >
    <TextView android:id="@+id/lblSomeLabel"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:gravity="center"
              android:layout_width="0dp"
              android:layout_weight="100"
              android:text="Your Text Here" />
</TableRow>
15
задан edt 25 June 2009 в 03:46
поделиться

1 ответ

когда вы назначаете функции переменным без ключевого слова var, они либо перезаписывают локальную переменную с этим именем, либо добавляются в глобальное пространство имен. (так что ваш do_stuff является глобальной функцией, а это не то, что вы хотите)

один из способов сделать то, что вы хотите, - это явно указать, где вы хотите, чтобы ваша функция располагалась.

(function($) { 
    $.fn.foo = function(options) {
        // whatever $().foo() should do
    };

    $.fn.foo.do_stuff = function() {
        console.log("hello world!");
    };

    $.fn.foo.do_stuff.do_other_stuff = function(){
        alert("who are you?");
    };
})(jQuery);

Изменить :

Это работает, потому что все функции в javascript являются объектами, что означает, что вы можете присваивать значения любому произвольному свойству.

Если вы хотите получить доступ к переменным других функций, вы можете переместить определения внутри других функций, например:

$.fn.foo.do_stuff = function() {
    console.log("hello world!");
    $.fn.foo.do_stuff.do_other_stuff = function(){
        alert("who are you?");
    };
};

но это будет означать, что функция определена только после того, как вы запустите другую функцию, и что каждый раз, когда вы запускаете функцию, она будет перезаписывать последнее определение.

Возможно, более идеальным решением было бы, чтобы каждая функция возвращала объект, содержащий вложенную функцию, например:

(function($) { 
    $.fn.foo = function(options) {
        // whatever $().foo() should do

        var do_stuff = function(do_stuff_args) {
            console.log("hello world!");
            // do stuff with options and do_stuff_args

            var do_other_stuff = function(other_args) {
                alert("who are you?");
                // here you have access to options, do_stuff_args, and other_args
            };

            return {
                do_other_stuff: do_other_stuff
            };
        };

        return {
            do_stuff: do_stuff
        }
    };
})(jQuery);

и вызывала его, используя

foo().do_stuff(some_options).do_other_stuff(other_options);

или

var a = foo(stuff).do_stuff(some_options);
a.do_other_stuff(foo);
a.do_other_stuff(bar);
36
ответ дан 1 December 2019 в 01:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: