Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从外部文件向javascript模块模式添加代码_Javascript_Jquery_Function_Knockout.js_Module - Fatal编程技术网

从外部文件向javascript模块模式添加代码

从外部文件向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

首先,我对javascript非常陌生

我已经编写了一个javascript插件来过滤html记录。使用Knockout.js,基本上将关键字输入到文本框中,插件会过滤html记录以显示包含关键字的记录

我已经使用模块模式编写了javascript,并且希望.js文件能够独立运行,同时也给用户提供了改变过滤器工作方式的机会

下面是my.js文件结构的简要概述:

$(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。你是对的,代码(现在编辑)有一些错误-我只是把它放在一起作为我实际得到的东西的一个框架表示,因此注释只是作为代码的替代品。谢谢你的建议,我感谢你的帮助。我要去看看它是否有效。这正是我所需要的。谢谢杰伦。