jQuery - 如何在小部件工厂插件中调用带参数的函数?

11

我想在我的jquery插件(基于widget-factory)内调用一个函数。

看起来像这样:

(function( $, window) {
    $.widget("mobile.multiview",$.mobile.widget, {
        stackUp: function (source, event, data) {
             ...
        }
    }
}) (jQuery,this);

我想从插件外部调用stackUp函数。问题是,我不知道如何正确传递参数。以下方法无法实现:

$('#trigger').multiview("stackUp('pagination', fakeEvent, fakeData)");

有人能指导我正确调用插件内的公共函数并传递参数的语法吗?

更新:

我可以像这样调用函数:

$('#trigger').multiview('stackUp');

但是我该如何传递参数呢?

3个回答

22

好的,经过无数次的调试,参数或参数是这样传递的:

$("#trigger").multiview('stackUp','pagination', fakeEvent, fakeData );

你只需要在函数后面用逗号分隔添加参数即可。希望这也能帮助其他人。


这里的“#trigger”是指什么? :S - OZZIE
@OZZIE:元素的ID为trigger,但这是一段时间以前的事了。希望仍然有所帮助。 - frequent

1

我对jquery不是很熟悉,但可以试试这个:

$("#trigger").multiview(function() { stackUp('pagination', fakeEvent, fakeData); });

这是一个匿名函数,将根据您的静态和动态参数在需要时执行。


哦,无法像这样触发stackUp。 - frequent
可能是缺少引号。我会加上它们。 - rekire
你的匿名函数很好,但在我的脚本中从未被触发。我找到了 widgety 的方法。请看我的答案。谢谢帮助! - frequent

1

我不太清楚那个插件是如何扩展和公开其功能的,但我猜你可以尝试以下方法之一:

$.mobile.widget.stackUp.apply($('#trigger'), ['pagination', fakeEvent, fakeData]);
$.mobile.multiview.apply($('#trigger'), ['pagination', fakeEvent, fakeData]);

然而他们完全有可能不公开那个方法。你有代码在哪里吗?

更新

实际上找到这个插件后,我阅读了文档,应该可以做到:

$('#trigger').stackUp(...)

在此查看源代码:http://jqueryui.com/demos/widget/default.html - 并查看定义的random函数。

或者,您可以在更全局的范围内定义该函数,然后将其用作配置对象的一部分,并在要应用于特定元素时使用它。


返回的表达式 '$.mobile.widget.stackUp'[undefined] 的结果不是一个对象。等一下,让我再试一次。嗯,还是不行。 - frequent
@frequent 请查看我的更新回复。唯一的区别是您正在执行$.widget(“mobile.multiview”,$.mobile.widget,{...},而示例代码是$.widget(“mobile.multiview”,{...} - nav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接