Javascript функция модульный подход проблема переменной init - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть модульный файл javascript libray, в котором я предоставляю две функции

  1. init для инициализации переменных из моего файла main.html.

  2. Функция execValidation для запуска на основе этих трех наборов переменных, инициализированных через основной файл.

Например:

var libraryModule = (function () {
  var arVals = {};
  var webFormData = {};
  var rules = [];

  function init(arVals, webFormData, rules) {
  //init all variables to global variables to use in execute Validations
    this.arVals = arVals;
    this.webFormData = webFormData;
    this.rules = rules;
  }

  //only passing RuleID, but it has dependencies of other variables, which I 
  //do not want to pass here
  function execValidation(ruleID) {
    //debugger;
    //Load arVals, webFormData and Rules from init
    var webFormData = this.webFormData;

    var arVals = this.arVals;
    var arVal = arVals[ruleID];

    var rules = this.rules;
    var rule = rules[ruleID]

    console.log(arVal);
    console.log(webFormData);
    console.log(rules);

  }

 return {
    execValidation: execValidation,
    init : init
 }
})(); // IIFE function

В моем html-файле я звоню вот так

 var arVals = {};
    //calling json file using call back
    ruleConfigModule.init(function (data) {
        arVals = data;

    });

//passing the arVals, webFormData and rules collection to init
libraryModule.init(arVals, webFormData, rules);

Only passing the ruleID
var result = libraryModule.execValidation("Rule1");

Я хочу передать только одну переменную, которая является RuleID, из функции execValidation, но функция init должна установить эти переменные внутри самой библиотеки js.Пожалуйста, кто-нибудь может помочь, поскольку он не работает или помогает реорганизовать его.

Метод вызова JSON для заполнения arVals

var ruleConfigModule = (function () {

function init(callback) {
    loadJSON(function (json) {
        callback(json);
    });
}
// Let's hide this function

function loadJSON(callback) {
    var xobj = new XMLHttpRequest();
    xobj.overrideMimeType("application/json");
    xobj.open('GET', 'http://localhost/test/config.json', true);
    xobj.onreadystatechange = function () {
        if (xobj.readyState == 4 && xobj.status == "200") {
            callback(JSON.parse(xobj.responseText));
        }
    };
    xobj.send();
}

return {
    //loadJSON: loadJSON,
    init: init
}

}) ();

Обновлено: Blockquote Как мне обеспечить заполнение arVals до вызова метода init?

1 Ответ

0 голосов
/ 27 февраля 2019

Это должно работать

function LibraryModule() {
  var arVals = {};
  var webFormData = {};
  var rules = [];
}

LibraryModule.prototype.init = function init(arVals, webFormData, rules) {
  //init all variables to global variables to use in execute Validations
  this.arVals = arVals;
  this.webFormData = webFormData;
  this.rules = rules;
}

LibraryModule.prototype.execValidation = function execValidation(ruleID) {
  //debugger;
  //Load arVals, webFormData and Rules from init
  var webFormData = this.webFormData;

  var arVals = this.arVals;
  var arVal = arVals[ruleID];

  var rules = this.rules;
  var rule = rules[ruleID]

  console.log(arVal);
  console.log(webFormData);
  console.log(rules);

  return rules;

}


let libraryModule = new LibraryModule();

libraryModule.init({
  rule: 'TEST'
}, {
  rule: 'TEST'
}, {
  rule: 'TEST'
})
var result = libraryModule.execValidation("rule");
console.log(result);
...