Изменение аннотированной переменной @Field в Jenkins после объявления?

Функции не могут быть сериализованы в объект JSON.

Поэтому я предлагаю вам создать отдельный объект (или свойство внутри объекта) для фактических свойств и просто сериализовать эту часть. После этого вы можете создать объект со всеми его функциями и повторно применить все свойства, чтобы восстановить доступ к вашему рабочему объекту.

Следуя вашему примеру, это может выглядеть так:

function MyObject() { this.init(); }
MyObject.prototype = {
    data: {
      property1: "",
      property2: ""
    },

    init: function () {
        this.property1 = "First";
        this.property2 = "Second";
    },

    test: function() {
      alert("Executing test!");
    },


   save: function( id ) {
     window.localStorage.setItem( id, JSON.stringify(this.data));
   },
   load: function( id ) {
     this.data = JSON.parse( window.getItem( id ) );
   }

}
0
задан user3537932 17 January 2019 в 19:50
поделиться

1 ответ

Наконец-то получил ответ, предоставленный , для изменения переменной сценария из Closure в Groovy ; был настолько сосредоточен на Дженкинсе, как виновнике, что я никогда не пытался попробовать сценарий в Groovy.

Замена changeAVar на

getMetaClass().setProperty(this, "aVar", newAVar) 

работает отлично.

Демонстрация:

node() {
    a = load ("path/to/file")
    println("Printing ${a.aVar.toString()}") //This prints "[]"
    a.changeAVar("b")
    println("Printing ${a.aVar.toString()}") //This prints "[b]"
    a.changeAVar2("c")
    println("Printing ${a.aVar.toString()}") //This prints "c"
    println("Printing ${aVar}") //This fails
}

В пути / к / файлу:

import groovy.transform.Field

@Field def aVar = []

def changeAVar(newAVar){
    aVar.add(newAVar)
}

def changeAVar2(newAVar){
    getMetaClass().setProperty(this, "aVar", newAVar)
}

return this    
0
ответ дан user3537932 17 January 2019 в 19:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: