如何更换' /'用' - '在ObservableArray里面?淘汰赛

时间:2014-07-25 06:28:12

标签: javascript knockout.js

我正在尝试通过ajax调用将一个可观察的数组传递给我的控制器,但除了日期之外我得到了每个值。我得到像'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上进行操作而不使用其他。

如果有人能表现出一些亮点,那就非常感激了。

3 个答案:

答案 0 :(得分:1)

我得知您在替换/时遇到问题。

试试这个

"(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.

答案 1 :(得分:1)

一种解决方案是添加一个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更改为计算值。
  3. 第一个解决方案应该非常简单(前提是它是一个有效的解决方案)。

    第二个解决方案看起来像这样:

    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"

答案 2 :(得分:0)

我没有使用过Knockout.js,但你可以用Javascript替换:

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

了解更多信息: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace