2017-10-03 10 views
1

の値を更新します。Javascriptを:私は次のコードを持っているオブジェクトフィールド

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

を私はformset_prefixformset_idが何であるかを最初に知りませんが、私は彼らが、後に複数の関数呼び出しを使用して取得し、私は最初にそれらを空で初期化します。

鍬は、私がformset_prefixformset_id valuesを更新するときDOMStringsオブジェクトの更新がfieldformset以降の属性を強制することができますか?いっそ

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

、文脈からそれを分離し、引数として必要なパラメータを渡します:

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

'DOMStrings'機能を作成して、その場でオブジェクトを計算します。 – georg

+0

オブジェクトは関数の戻り値ですか? DOMStringフィールドの属性を複数回変更する必要があります。あなたは私に例を挙げることができますか?複数の値が単純か計算されていることを考慮してください。 – user3541631

+0

以下に例を追加しました。 – georg

答えて

2

1つのオプションは、DOMStrings機能を作成し、その場でオブジェクトを計算することですこれを行うには複数の方法があります。

あなたはview定義された方法 - formset_prefixform_idを、DOMStringsviewためプライベートです。オプションは、formset_prefixとの値を設定する関数を作成し、DOMStringsも更新するように注意することができます。たとえば、次のように

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

関連する問題