2017-10-03 6 views
1

je le code suivant:Javascript: Mettre à jour la valeur d'un champs d'objet

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); 
     } 
..... }(); 

Je ne sais pas au début ce qui est le formset_prefix et formset_id, mais je les ai plus tard en utilisant les appels de fonctions multiples, donc je les initialise au début avec vide.

Hoe je peux forcer la mise à jour de l'objet DOMStrings attribue field et formset plus tard, quand je mets à jour le formset_prefix et formset_id values?

+0

créér 'DOMStrings' une fonction et calculer l'objet à la volée. – georg

+0

donc l'objet à être le retour de la fonction? les attributs de champ DOMString doivent être modifiés plusieurs fois. Peux-tu me donner un exemple ? prendre en considération qu'il a plusieurs valeurs simples ou calculées. – user3541631

+0

Ajout d'un exemple ci-dessous. – georg

Répondre

2

Une option est de faire DOMStrings une fonction et calculer l'objet à la volée:

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); 
     } 
..... }(); 

Mieux encore, découpler du contexte, et transmettre les paramètres nécessaires comme arguments:

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

Il y a plusieurs façons de le faire.

La façon dont vous avez défini view-formset_prefix, form_id, DOMStrings sont privés pour view. Une option pourrait être de créer des fonctions pour définir les valeurs de formset_prefix et form_id qui prendra soin de mettre à jour également DOMStrings. Par exemple:

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');