2017-10-03 2 views
1

Ich habe den folgenden Code:Javascript: Aktualisieren Sie den Wert eines Objekts Felder

var view = function() { 

var formset_prefix = '', form_id = ''; 

var DOMStrings = { 
    formset_total: 'TOTAL_FORMS', 
    formset: '*[id$=-TOTAL_FORMS]', 
    field: '*[id^=id_' + formset_prefix + '-]', 
    field_idx = '*[id^=id_' + formset_prefix + form_id +'-]' 

}; 

return { 
.................... 
get_form_fields: function (prefix, id) { 
      formset_prefix = prefix; 
      form_id = id; 
      console.log(formset_prefix); 
      console.log(DOMStrings.field); 
      return document.querySelectorAll(DOMStrings.field); 
     } 
..... }(); 

Ich weiß nicht, am Anfang, was die formset_prefix ist und formset_id, aber ich habe sie später mehrere Funktionsaufrufe verwenden, also initialisiere ich sie am Anfang mit leer.

Hoe kann ich zwingen, die Aktualisierung des DOMStrings Objektattribute field und formset später, als ich die formset_prefix und formset_id values aktualisieren?

+0

Make 'DOMStrings' eine Funktion und berechnen das Objekt auf der Fliege. – georg

+0

also das Objekt die Rückkehr der Funktion sein? Die DOMString-Feldattribute müssen mehrmals geändert werden. Kannst du mir ein Beispiel geben ? Berücksichtigen Sie, dass er mehrere einfache oder berechnete Werte hat. – user3541631

+0

Hinzugefügt ein Beispiel unten. – georg

Antwort

2

Eine Option ist DOMStrings eine Funktion und berechnen das Objekt auf der Fliege zu machen:

var formset_prefix = '', form_id = ''; 

var DOMStrings = function() { 
    return { 
     formset_total: 'TOTAL_FORMS', 
     formset: '*[id$=-TOTAL_FORMS]', 
     field: '*[id^=id_' + formset_prefix + '-]' 
    } 
} 

return { 
.................... 
get_form_fields: function (prefix, id) { 
      formset_prefix = prefix; 
      form_id = id; 
      return document.querySelectorAll(DOMStrings().field); 
     } 
..... }(); 

Noch besser wäre es, entkoppeln sie aus dem Kontext und die erforderlichen Parameter als Argumente übergeben:

var DOMStrings = function(prefix, id) { 
    return { 
     formset_total: 'TOTAL_FORMS', 
     formset: '*[id$=-TOTAL_FORMS]', 
     field: '*[id^=id_' + prefix + '-]' 
    } 
} 

return { 
.................... 
get_form_fields: function (prefix, id) { 
      var strings = DOMStrings(prefix, id); 
      return document.querySelectorAll(strings.field); 
     } 
..... }(); 
1

Es gibt mehrere Möglichkeiten, dies zu tun.

Die Art und Weise Sie view definiert - formset_prefix, form_id, DOMStrings sind privaten für view. Eine Option könnte darin bestehen, Funktionen zu erstellen, um die Werte formset_prefix und form_id einzustellen, die auch die Aktualisierung DOMStrings übernehmen. Zum Beispiel:

var view = function() { 
 

 
    var formset_prefix = '', 
 
     form_id = ''; 
 

 
    var DOMStrings = { 
 
    formset_total: 'TOTAL_FORMS', 
 
    formset: '*[id$=-TOTAL_FORMS]', 
 
    field: '*[id^=id_' + formset_prefix + '-]' 
 
    }; 
 

 
    return { 
 
    /* .................... */ 
 
    get_form_fields: function(prefix, id) { 
 
     console.log('formset_prefix = ' + formset_prefix); 
 
     console.log('DOMStrings.field = ' + DOMStrings.field); 
 
     return document.querySelectorAll(DOMStrings.field); 
 
    }, 
 
    /* Setter for formset_prefix */ 
 
    set_formset_prefix: function(prefix) { 
 
     formset_prefix = prefix; 
 
     DOMStrings.field = '*[id^=id_' + formset_prefix + '-]'; 
 
     return this; 
 
    }, 
 
    /* Setter for form_id */ 
 
    set_form_id: function(id) { 
 
     form_id = id; 
 
     return this; 
 
    } 
 
    /*.....*/ 
 
    } 
 
}(); 
 

 

 
/* Note: when you return "this" you can chain the method calls 
 
    and now you can do someting like the following 
 
*/ 
 

 
var fields = view.set_formset_prefix('my-prefix') 
 
       .set_form_id('my-form-id') 
 
       .get_form_fields('my-prefix', 'my-form-id');

Verwandte Themen