Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 淘汰:如何根据某些条件更改同一型号的数据_Javascript_Html_Knockout.js_Frontend - Fatal编程技术网

Javascript 淘汰:如何根据某些条件更改同一型号的数据

Javascript 淘汰:如何根据某些条件更改同一型号的数据,javascript,html,knockout.js,frontend,Javascript,Html,Knockout.js,Frontend,我有一个表,其中数据根据某些条件动态出现。我想了解一些数据,例如点击按钮 if(true){ Show: ABC Data } else{ Show XYZ Data } 这是我用来扩展功能的方法,但不幸的是,我无法满足这个要求。在viewmodel构造函数中,您定义了一些关于如何加载数据的逻辑: self.items = ko.observableArray(data.map(function(i) { return n

我有一个表,其中数据根据某些条件动态出现。我想了解一些数据,例如点击按钮

    if(true){
       Show: ABC Data
}
       else{
        Show XYZ Data
        }

这是我用来扩展功能的方法,但不幸的是,我无法满足这个要求。

在viewmodel构造函数中,您定义了一些关于如何加载数据的逻辑:

self.items = ko.observableArray(data.map(function(i) {
  return new rowModel(i.id, i.name, i.status);
}));
因为items是一个可观察的数组,所以您可以随时更新其内容

让我们将映射逻辑移到一个单独的函数:

self.loadData = function(rawData) {
  var viewmodels = rawData.map(function(d) {
    return new RowModel(d.id, d.name, d.status);
  });

  self.items(viewmodels);
};
在构造函数中,您现在可以加载初始数据,如下所示:

self.items = ko.observableArray();
self.loadData(data);
在按钮的单击回调中,您将重用新的loadData方法:

可选:

出于纯粹的美学原因,我通常定义一个静态构造函数帮助器,以便于映射:

RowModel.fromRawDataPoint = function(dataPoint) {
  return new RowModel(dataPoint.id, dataPoint.name, dataPoint.status);
};
我会将构造函数中定义的函数移到VM的原型中:

MyVM.prototype.loadData = function(rawData) {
  this.items(rawData.map(RowModel.fromRawDataPoint));
};

这里有一个更新的提琴:

我不明白根据情况会发生什么。呈现不同的视图?将输入绑定到不同的项?你能在小提琴的上下文中详细说明吗?@user3297291当然可以,因此如果你看到Fiidle中的输出,就会有一个带有预定义值的表。对于我们的简单案例,我希望在Bottm上有一个按钮,我们称之为更改表值,点击它,将更改值,这是新的按钮,这正是我希望实现的。谢谢你的投入和解释。
MyVM.prototype.loadData = function(rawData) {
  this.items(rawData.map(RowModel.fromRawDataPoint));
};