从外部文件向javascript模块模式添加代码
首先,我对javascript非常陌生 我已经编写了一个javascript插件来过滤html记录。使用Knockout.js,基本上将关键字输入到文本框中,插件会过滤html记录以显示包含关键字的记录 我已经使用模块模式编写了javascript,并且希望.js文件能够独立运行,同时也给用户提供了改变过滤器工作方式的机会 下面是my.js文件结构的简要概述:从外部文件向javascript模块模式添加代码,javascript,jquery,function,knockout.js,module,Javascript,Jquery,Function,Knockout.js,Module,首先,我对javascript非常陌生 我已经编写了一个javascript插件来过滤html记录。使用Knockout.js,基本上将关键字输入到文本框中,插件会过滤html记录以显示包含关键字的记录 我已经使用模块模式编写了javascript,并且希望.js文件能够独立运行,同时也给用户提供了改变过滤器工作方式的机会 下面是my.js文件结构的简要概述: $(function(){ var s, Filter = { settings:{ //default
$(function(){
var s,
Filter = {
settings:{
//default settings
},
initialise: function(){
s = this.settings;
this.someFunction1;
this.someFunction2;
},
someFunction1: function(){
//
},
someFunction2: function(){
//
},
}
Filter.initialise();
});
如您所见,我指定了一个要调用的函数-initialise
。在初始化
中,我已将变量s
(与模块声明在同一级别)设置为指向设置
,以便模块的所有子功能都可以访问它
我想知道的是,覆盖设置是否可以通过调用.js文件的html文件传递
理想情况下,我希望插件有默认设置,但允许用户根据自己的需要指定/覆盖特定设置
任何帮助都将不胜感激。谢谢。首先,您的代码中有一些特性 一件事是你有
this.someFunction1在初始化
函数中使用code>(第二个函数使用一个),但这并没有什么作用。这只是一个声明
另一件事是您将过滤器
声明为一个对象,但在各种属性之间缺少,
(逗号)
最后,您声明了两次someFunction2
(尽管我假设这是一个复制/粘贴错误?)
例如,要找到这些问题,可以使用JavaScript linting工具。尝试复制粘贴你的问题代码,你会看到所有这些问题弹出
如果我解决了这些问题,我会:
$(function(){
var s,
Filter = {
settings:{
//default settings
},
initialise: function(){
s = this.settings;
},
someFunction1: function(){
//
},
someFunction2: function(){
//
}
};
Filter.initialise();
});
目前,在该代码中,过滤器
仅在外部封盖中可见。要使它对其他代码位可用,您必须将其导出到您自己的命名空间对象或作为jQuery插件
第一个选项是可能的,但需要对设置进行更多的工作和假设。所以让我继续展示第二种选择。这是非常好的,但我基于以下代码,因为它在IMO中更完整一些:
(function($) {
$.filter = function(element, options) {
var defaults = {
// default settings
}
var filter = this;
filter.settings = {};
var initialise = function() {
filter.settings = $.extend({}, defaults, options);
filter.element = element;
// code goes here
}
// This function is *public*, just save it in a 'var' instead of setting it
// as a property of 'plugin' to keep it private to your plugin.
filter.someFunction1 = function() {
//
}
filter.someFunction2 = function() {
//
}
initialise();
}
})(jQuery);
在上面的代码中,使用用户提供的选项扩展默认设置
您可以用最基本的形式调用插件,如下所示:
var options = { filterEmptyOptions: true, showTimeZone: false, /* etc */ };
$.filter($('#myDiv'), options);
此外,您还可以保存最后一行的结果,稍后调用插件的public方法。Hi。你是对的,代码(现在编辑)有一些错误-我只是把它放在一起作为我实际得到的东西的一个框架表示,因此注释只是作为代码的替代品。谢谢你的建议,我感谢你的帮助。我要去看看它是否有效。这正是我所需要的。谢谢杰伦。