Функция отправки (с параметрами) внутри объекта JSON - PullRequest
0 голосов
/ 02 июня 2019

Я пытаюсь передать функцию (с параметром) другой функции внутри объекта json.Оно всегда не определено, и я не могу найти причину.

Первый запуск функции packtNs.graduateForm.loadEvent.Затем отправка функции packtNs.common.populateWithTodaysDate("packt_supervisor", "packt_postgraduatestartdate") функции packtNs.common.wireOnChangeEvents.

Вот мой код:

var packtNs = packtNs || {};

packtNs.common = packtNs.common || {};

/**
* A method that populates the post graduate start date
* when the supervisor lookup is populated.
* @returns {Void}
*/

packtNs.common.populateWithTodaysDate = function(attributeToMonitor, dateAttributeToChange)
{
    console.log("Populatewithtodaysdate function triggered");
}

packtNs.common.wireOnChangeEvents =
    function(eventAttributeTuples){
        debugger;
        for (var i in eventAttributeTuples) {
           console.log(eventAttributeTuples[i].attribute);
           ////attribute is OK
           console.log(eventAttributeTuples[i].function);
           ////function is always undefined. eventAttributeTuples[0] object doesnt have function - tried different names
        }

}

packtNs.graduateForm = packtNs.graduateForm || {};

packtNs.graduateForm.loadEvent = function(){
    packtNs.common.wireOnChangeEvents([
        { 
            attribute: "packt_supervisor",
            function:packtNs.common.populateWithTodaysDate("packt_supervisor", "packt_postgraduatestartdate")
        }
    ]);
    debugger;
}

Ответы [ 2 ]

1 голос
/ 02 июня 2019

Это объект с пространством имен, а не JSON, но чтобы получить что-то, нужно что-то вернуть. Я переименовал твою «функцию» в «что-то», потому что это было неправильно.

var packtNs = packtNs || {};

packtNs.common = packtNs.common || {};

/**
 * A method that populates the post graduate start date
 * when the supervisor lookup is populated.
 * @returns {Void}
 */

packtNs.common.populateWithTodaysDate = function(attributeToMonitor, dateAttributeToChange) {
  console.log("Populatewithtodaysdate function triggered");
  return {
    arg1: attributeToMonitor,
    arg2: dateAttributeToChange
  };
}

packtNs.common
  .wireOnChangeEvents = function(eventAttributeTuples) {
    //debugger;
    console.log("tup:", eventAttributeTuples);
    for (var i in eventAttributeTuples) {
      console.log(eventAttributeTuples[i].attribute);
      ////attribute is OK
      console.log(eventAttributeTuples[i].mything);
      ////function is always undefined. eventAttributeTuples[0] object doesnt have function - tried different names
    }
    return eventAttributeTuples;
  }

packtNs.graduateForm = packtNs.graduateForm || {};

packtNs.graduateForm.loadEvent = function() {
  return packtNs.common.wireOnChangeEvents([{
    attribute: "packt_supervisor",
    mything: packtNs.common.populateWithTodaysDate("packt_supervisor", "packt_postgraduatestartdate")
  }]);
  // debugger;
}

var myresult = packtNs.graduateForm.loadEvent();
console.log("myresult:",myresult);
1 голос
/ 02 июня 2019

Во-первых, как указано в комментариях к вашему вопросу, измените имя атрибута с «функция» на что-то другое. Тогда я рекомендую вам попробовать передать переданное строковое представление функции в метод eval (см .: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...