2017-10-11 21 views
0

我需要設置一個'輸入隱藏'表單元素和一個從敲除計算生成的數組,以將其發送到表單中的服務器。敲除數據綁定值。需要一個數組的字符串表示,而不是一個帶數組元素的字符串

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

在我的視圖模型:

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

其中self.CourseSubjects是包含selectedCourseSubjects'觀察的陣列可觀察對象的陣列。

但問題是,隱藏輸入的值是一個字符串與逗號分隔的Ids列表,而我需要的是數組的字符串表示形式。我的意思是,我得到的輸入隱藏的是:

<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

如何覆蓋toString方法Array

事情是這樣的:

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

通常認爲在內置類型上擴展/覆蓋方法通常被認爲是不好的做法。主要是因爲你永遠不知道你的應用程序使用的其他庫是否依賴於默認實現。 –

相關問題