[英]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
,我可以想到另外两种方法来解决您的问题:
startDate
之前,将/
替换为-
。 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.