【问题标题】:Knockout: Table Select Unselect Row. Issue/challenge with unselecting Row淘汰赛:表选择取消选择行。取消选择行的问题/挑战
【发布时间】:2019-01-13 09:10:38
【问题描述】:

我有一个使用Knockout 填充数据和选择行的表格。现在的挑战是我可以选择行并且我可以看到它的详细信息。但是当我点击分页或任何特定的搜索框时,我希望取消选择行。

这里是Fiddle,它将解释更多

以下是 HTML 页面的模型代码

var RowModel = function(id, name, status) {
  this.ID = ko.observable(id);
  this.Name = ko.observable(name);
  this.Status = ko.observable(status);

};

RowModel.fromRawDataPoint = function(dataPoint) {
  return new RowModel(dataPoint.id, dataPoint.name, dataPoint.status);
};

【问题讨论】:

  • 如果我理解你的问题,这个函数:firstpagepreviousnextlastpage,应该和self.select()一样,即self.selected(null);self.enableEdit(false);。此外,当您取消选择一行时,您的小提琴会出错,因为在value: selected().ID 中,selected() 为空。 :-)
  • @JoseLuis 是的,你是对的。我还想将我的字段 ID、名称和状态反映为空
  • 请看一下 Whith 绑定:knockoutjs.com/documentation/with-binding.html :-)
  • 感谢它帮助我理解了这个问题。

标签: javascript html knockout.js knockout-2.0 knockout-3.0


【解决方案1】:

从小提琴中,我可以看到您正在通过调用 self.selected(null)self.enableEdit(false) 来实现取消选择。

因此,您可以在页面更改或搜索完成时再次调用它们。

self.deselect = function(){
    self.selected(null);
    self.enableEdit(false);
};

this.next = function() {
    self.deselect();
    if(self.pageNumber() < self.totalPages()) {
        self.pageNumber(self.pageNumber() + 1);
    }
}

this.lastpage = function() {
    self.deselect();
    if(self.pageNumber() < self.totalPages()) {
        self.pageNumber(self.totalPages());
    }
}


this.firstpage = function() {
    self.deselect();
    if(self.pageNumber() != 0) {
        self.pageNumber(self.pageNumber()-self.pageNumber());
        alert(self.pageNumber());
    }
}

this.previous = function() {
    self.deselect();
    if(self.pageNumber() != 0) {
        self.pageNumber(self.pageNumber() - 1);
    }
}

编辑:在您对 ID、名称和状态未更新的评论之后,我添加了 3 个新的 observables selectedNameselectedIDselectedStatus。我在 HTML 中使用这些 observables,以便在 selected 更改时更新它们。这是通过在selected 上使用subscribe 函数来完成的。

HTML

<input type="text" name="ID" data-bind="value: selectedID, enable: enableEdit" />
<br>Name :
<input type="text" name="Name" data-bind="value: selectedName, enable: enableEdit" />
<br>Status :
<input type="text" name="Status" data-bind="value: selectedStatus, enable: enableEdit" />

JS

self.selected = ko.observable(self.items()[0]);
self.selectedID=ko.observable(self.items()[0].ID());
self.selectedName=ko.observable(self.items()[0].Name());
self.selectedStatus=ko.observable(self.items()[0].Status());

self.selected.subscribe(function(newValue){
  if (newValue === null){
    self.selectedID(null);
    self.selectedName(null);
    self.selectedStatus(null);
    return;
  }
  if (typeof newValue !== 'undefined'){
    self.selectedID(newValue.ID());
    self.selectedName(newValue.Name());
    self.selectedStatus(newValue.Status());
  }
});

【讨论】:

  • 这几乎是我希望实现的,但是如何将我的字段 ID、名称和状态反映为空
  • 这里是快速更新的Fiddle 有一个“更改数据”按钮单击它会更改表中的数据。当数据更改时,我还希望刷新/更新分页。例如:如果您在最后一页然后单击按钮,它应该转到第一页并且分页箭头应该刷新。任何想法如何彻底打破它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-01
  • 1970-01-01
  • 2017-03-17
  • 1970-01-01
  • 2013-07-15
  • 2013-05-04
  • 1970-01-01
相关资源
最近更新 更多