2017-10-11 26 views
0

フォーム内のサーバーに送るために、計算されたノックアウトから生成された配列で '入力隠し'フォーム要素を設定する必要があります。私のViewModelでノックアウトデータバインド値。配列要素を持つ文字列ではなく配列の文字列表現が必要

<input type="hidden" name="CourseSubjects" data-bind="value: allSelectedCourseSubjectsIds"/> 

self.CourseSubjectsselectedCourseSubjects「観察可能な配列を含んで観測可能なオブジェクトの配列がある
self.allSelectedCourseSubjectsIds = ko.computed(function() { 
     var result = []; 
     for (var i = 0; i < self.CourseSubjects.length; i++) {     
      result = result.concat(self.CourseSubjects[i]().selectedCourseSubjects()); 
     }  

     return result; 
    },self).extend({ rateLimit: { method: "notifyWhenChangesStop", timeout: 1000 } }); 

しかし、隠された入力の値は、コンマで区切られたIDのリストを持つ文字列ですが、必要なのは配列の文字列表現です。

<input type="hidden" name="CourseSubjects" value="1,2,3"/> 

と何が必要なの

<input type="hidden" name="CourseSubjects" value="[1,2,3]"/> 

ありがとうです:私は意味、私は隠された入力として取得することです。

答えて

1

結合の値は、JavaScript式であってもよいです。

data-bind="value: '[' + allSelectedCourseSubjectsIds() + ']'"/> 
0

ArraytoStringメソッドをオーバーライドする方法はありますか?このような

何か:

Array.prototype.toString = function arrayToString() { 
    var result = ''; 
    for (let i=0; i<this.length; i++){ 
    if (i !== this.length-1) 
    { 
     result = result + this[i] + ', '; 
    } 
    else 
    { 
     result = result + this[i]; 
    } 
    } 
    return '[' + result + ']'; 
}; 

注:これは、すべての配列がtoStringが呼び出され、このように表示されるようになります。

https://jsfiddle.net/aLot9aoc/30/

+0

組み込み型でメソッドを拡張/オーバーライドすることは、一般に悪い習慣と考えられます。主に、アプリケーションで使用される他のライブラリがデフォルトの実装に依存しているかどうかを決して知ることができないためです。 –

関連する問題