簡體   English   中英

如何在ObservableArray中用'-'替換'/'? 淘汰賽js

[英]How to replace ' / ' with '-' inside ObservableArray ? Knockout js

好吧,我試圖通過ajax調用將一個可觀察的數組傳遞給我的控制器,但是我得到除date之外的所有值。 我得到類似'01 -01-01'之類的東西。

我發現了問題,但無法解決,因為我不知道如何用-替換/

我的ObservableArray大約有10個列表項,每個列表項都具有許多屬性,而startDate具有類似("23/10/2014")的日期。 我只需要類似("23-10-2014")東西。

我想發布我的函數的想法,我希望在這種情況下不需要這樣做。

讓我用一點代碼和示例數據來解釋一下:

function myarray()
{
var self=this;
self.startDate=ko.observable("");
self.name=ko.observable("");
self.place=ko.observable("");
}

MyObservableArray:

self.Main= ko.observableArray();

在這兩者之間,我做了一些事情將數據加載到self.Main並且我正在將self.Main發送到具有如下數據的控制器中:

self.Main[0] holds : 

startDate() -->gives you  "23/10/2014" //individual observables inside onservable array
name() --> "jhon"
place()--> "croatia"

可能

self.Main[9] holds :
startDate() --> "29/05/2012" 
    name() --> "pop"
    place()--> "usa"

我正在嘗試像我想要更改self.Main()並替換startDate並使用相同的self.Main發送到我的控制器。 self.Main替換一次后,當我檢查日期時, /應該替換為-

可能的解決方案:我可以使用其他可觀察的數組,並將Main所有VM推入其中,但是我嘗試對self.Main進行操作,而不使用other。

如果有人可以顯示一些光,那將是萬分感謝。

我得到的是您在轉義/替換中面臨問題。

嘗試這個

"(23/10/2014)".replace(/\//g,"-") //returns "(23-10-2014)"

我使用簡單的JS為您嘗試了一些東西

var arr = [{date:"(23/10/2014)"},{date:"(23/10/2014)"},{date:"(23/10/2014)"},{date:"(23/10/2014)"}];

arr.forEach(function(obj){obj.date = obj.date.replace(/\//g,"-")});

console.log(arr) //will print date field as "(23-10-2014)" for all objects.

一種解決方案是添加一個computed值,該值將返回具有正確值的數組。

self.Main = ko.observableArray([...values here...]);

self.MainComputed = ko.computed(function() { 
  var computedArray = [];

  self.Main().forEach(function(item) {
    var newItem = myarray(); //Create a new item.
    newItem.name(item.name());
    newItem.place(item.place());
    newItem.startDate(item.startDate().replace(/\//g,"-"));
    computedArray.push(newItem);
  });

  return computedArray;
});

然后在需要使用-的地方使用計算值。


考慮到您想使用self.Main ,我可以想到另外兩種方法來解決您的問題:

  1. 在項目上設置startDate之前,將/替換為-
  2. 將原始值存儲在另一個變量中時,將startDate更改為計算值。

第一個解決方案應該非常簡單(前提是它是有效的解決方案)。

第二種解決方案如下所示:

function myarray()
{
  var self=this;
  self.originalStartDate = ko.observable("");
  self.name = ko.observable("");
  self.place = ko.observable("");

  self.startDate = ko.computed(function() {
    if(self.originalStartDate()) {
      //We can only replace if the value is set.
      return self.originalStartDate().replace(/\//g,"-");
    }
    else {
      //If replace was not possible, we return the value as is.
      return self.originalStartDate();
    }
  });
}

現在,當您設置值時,您將執行以下操作:

var item = myarray();
item.originalStartDate = "01/01/2014";

然后,當您獲得startDate的值時,您將獲得"01-01-2014"

我沒有使用過Knockout.js,但是您可以使用Javascript替換來做到這一點:

var str = [your array value] ;
var res = str.replace("/", "-");

有關更多信息: https : //developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/replace

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM