我有一个使用如下变量的插件:
(function( $, window) {
$.widget("mobile.multiview",$.mobile.widget, {
// variables
vars: {
$ignoreMyOwnNextHashChange : false
}
});
...
}) (jQuery,this);
我想从外部设置 $ ignoreMyOwnNextHashChange =另一个插件位于此之后。这可能吗?这样做是行不通的:
$.mobile.multiview.vars.$ignoreMyOwnNextHashChange = true;
答案 0 :(得分:1)
这里有两个不错的选择:
使用窗口小部件类中的默认options
对象。所有小部件都有options
属性,并且围绕它构建了许多其他功能。使用options
将允许您为每个选项属性编写getter和setter:
$("#selector").multiview("option", "$ignoreMyOwnNextHashChange"); // getter
$("#selector").multiview("option", "$ignoreMyOwnNextHashChange", true); // setter
如果你走这条路,你实际上最终会在你的小部件中减少代码:
(function($, window) {
$.widget("mobile.multiview", {
// variables
options: {
$ignoreMyOwnNextHashChange: false
}
});
})(jQuery, this);
如果您的属性可以在初始化时设置,然后检索或稍后设置,这可能是您的最佳选择。所有jQueryUI小部件都遵循这种模式。
您的第二个选择是创建一个可以调用的属性特定方法。如果您在初始化时在内部设置变量,然后允许用户获取或设置变量,那么这非常有用:
(function($, window) {
$.widget("mobile.multiview", {
vars: {
$ignoreMyOwnNextHashChange: false
},
ignoreMyOwnNextHashChange: function (newValue) {
if (arguments.length) {
this.vars.$ignoreMyOwnNextHashChange = newValue;
}
return this.vars.$ignoreMyOwnNextHashChange;
}
});
})(jQuery, this);
现在,在实例化窗口小部件后,您可以像这样调用该函数:
$("#selector").multiview("ignoreMyOwnNextHashChange"); // getter
$("#selector").multiview("ignoreMyOwnNextHashChange", true); // setter.
针对小工具工厂编写插件的提示的一些很好的资源是jQueryUI's dev guide on the widget factory和jQueryUI source itself。