我一直在阅读很多关于使用 jQuery.Widget Factory 为我的插件带来的好处。其中一个功能是jQuery.widget如何为您的小部件创建一个名称平台。这很有吸引力,因为我可以在jQuery上下文中自然地维护我当前的命名空间。
问题:
我一直得到“$(”。myWidget“)。namespace.newWay不是一个函数”错误。
对于以下元素......
<div class="myWidget"></div>
THIS EXAMPLES代码工作:
虽然很好......这不是我想要实现的......因为我仍然希望我的命名空间得到尊重。
var workingVersion = {
_init: function () { /* Do Something*/ }
};
$.widget("ui.workingVersion", workingVersion);
$(document).ready(function () {
$('.myWidget').workingVersion();
});
但是,我的代码失败:
var namespace = namespace || { };
;namespace.newWay = (function ($, window, document, undefined) {
return function (options) {
var self = this;
this._create = function () {
// Do something
},
this._init = function() {
// Do something
},
this.publicFunction = function () {
// Do something
};
};
})(jQuery, window, document);
$(document).ready(function () {
$.widget("ui.namespace.newWay", namespace.newWay); //<-- Namespace does get appended
$('.myWidget').namespace.newWay({ type: 'testing' }); //<-- But still fails here
});
我的问题是:
为什么会失败?
相关阅读:
答案 0 :(得分:1)
这个答案有点晚了,也许,但是我在同样的事情上苦苦挣扎,不得不做一些阅读。
$()一般
$()
实例是一个无命名空间的快捷方式列表,用于分布在不同命名空间的不同功能。您可以通过编写以下内容为此快捷方式列表添加更多功能:
$.fn.myFunction = function() {
...
};
然后通过调用
来访问它$("...").myFunction();
如果使用相同的名称添加两个函数,则后者将覆盖第一个函数。
<强>窗口小部件强>
当你创建一个带有命名空间的窗口小部件时,它就像你期望的那样用它的命名空间创建,但是$()
它没有添加它的命名空间,作为真正的widget-with-shortcut的简化快捷方式。这是使用$.widget.bridge()
完成的。因此,您可以通过以下方式创建自己的$()命名空间链接:
$.widget.bridge("namespace_myFunction", $.namespace.myFunction );
然后像这样访问您的小部件:
$("#myDiv").namespace_myFunction();
要直接使用小部件的原始命名空间,您可以改为调用它:
$.namespace.myWidget(
{
option1: "",
option2: ""
},
$("#div")
);
希望这会澄清一点......