0

我有以下代码,它有效

var settings = trumbowyg.o.plugins.giphycrumbs;
settings = $.extend(true, {},
    defaultOptions,
    trumbowyg.o.plugins.giphycrumbs || {}
);

if(!settings.open_modal) {
    settings.open_modal = function() {
        $(settings.modal_selector).modal('show');
    }
}

trumbowyg.addBtnDef('giphycrumbs', {
    fn: settings.open_modal
});

按下settings.open_modal按钮时执行的位置。

但是,我想在其他地方定义这个函数(在 trumbowyg 的插件部分而不是在插件本身内部),但要做到这一点,我需要能够将选择器传递给它。我已经使用类似的close_modal功能完成了此操作,但我遇到了该open_modal功能的问题。

以下是我将如何以我想要的方式定义函数:

plugins: {
    giphycrumbs: {
        ...
        modal_selector: '#giphy_modal',
        close_modal: function(selector) {
            $(selector).modal('hide');
        },
        open_modal: function(selector) {
            $(selector).modal('show');
        }
    },
}

这意味着我的addBtnDef电话将更改为:

trumbowyg.addBtnDef('giphycrumbs', {
    fn: settings.open_modal(settings.modal_selector)
});

但是,这会导致函数在初始化时立即运行,而不是像在将选择器添加到函数之前那样等待按钮被按下。

如何让这段代码在运行函数之前等待按钮被按下,就像在添加选择器之前一样?

4

2 回答 2

0

这是解决此问题的一种方法,尽管我更喜欢不需要额外功能的更好的解决方案。

首先,在插件初始化settings 之外声明,并以与以前相同的方式为其分配设置。

var settings = null;

...

giphycrumbs: {
    init: function (trumbowyg) {
        settings = trumbowyg.o.plugins.giphycrumbs;
        ...

接下来,创建一个不使用任何参数的新函数,它只调用settings.open_modal(settings.modal_selector).

function run_open_modal() {
    settings.open_modal(settings.modal_selector);
}

并在 addBtnDef 调用中调用该函数。

trumbowyg.addBtnDef('giphycrumbs', {
    fn: run_open_modal
});
于 2020-07-21T11:53:27.947 回答
0

是否预先声明了 open_modal?因为,如果不是,您可以将设置声明为:

 if(!settings.open_modal) {
 settings.open_modal = function(selector) {
    selector= selector||settings.modal_selector.
      $(selector).modal('show');
   }
} 

因此,如果您可以重新定义它,请让原始闭包接受选择器。如果您不通过,则默认为初始行为。

于 2020-07-21T12:09:15.580 回答