Knockout.js 跳过敲除可观察数组中的$index()
我有一个表,它显示了一个敲除Knockout.js 跳过敲除可观察数组中的$index(),knockout.js,Knockout.js,我有一个表,它显示了一个敲除可观察数组中的一些信息,我使用文本的数据绑定:$index()+1来显示每个项目在数组中的位置。现在,我希望能够跳过项目的位置,如果项目的值为true,则将其设为空。因此,最终结果将是显示正常的1到x索引,但对于每个将某个值设置为true的项目,将不显示任何索引,并且索引计数将在该项目之后拾取,就好像该项目根本不包括在索引计数中一样 我已经做了一个例子来说明这个问题 有没有什么好办法 只需在td数据绑定中使用条件运算符,并显示或空字符串或索引: <table d
可观察数组中的一些信息,我使用文本的数据绑定:$index()+1
来显示每个项目在数组中的位置。现在,我希望能够跳过项目的位置,如果项目的值为true
,则将其设为空。因此,最终结果将是显示正常的1到x
索引,但对于每个将某个值设置为true
的项目,将不显示任何索引,并且索引计数将在该项目之后拾取,就好像该项目根本不包括在索引计数中一样
我已经做了一个例子来说明这个问题
有没有什么好办法 只需在td
数据绑定中使用条件运算符,并显示或空字符串或索引:
<table data-bind="foreach: people">
<tr>
<td data-bind="text: isresting ? '' : $index() + 1"></td>
<td data-bind="text: name"></td>
<td data-bind="text: isresting"></td>
</tr>
</table>
更新
我已更新了我的实现,并添加了一个函数,用于更正计算索引:
Html:
视图模型:
function ViewModel() {
var self = this;
self.people = ko.observableArray();
self.getIndexForMan = function(man) {
if (man.isresting) {
return null;
}
var index = 1;
var rawPeople = self.people();
for (var i = 0; i < rawPeople.length; i++) {
if (rawPeople[i] == man) {
break;
}
if (!rawPeople[i].isresting) {
index++;
}
}
return index;
}
};
var model = new ViewModel();
model.people(data);
ko.applyBindings(model);
函数ViewModel(){
var self=这个;
self.people=ko.observearray();
self.getIndexForMan=函数(man){
如果(人正在测试){
返回null;
}
var指数=1;
var rawPeople=self.people();
for(var i=0;i
下面是一个使用子视图模型的示例,我在其中切换索引的可见性
var ViewModel=函数(数据){
var _self=这个;
var personCount=0;
_self.PeopleMap=ko.array(
ko.utils.arrayMap(数据、函数(项){
如果(!item.isresting){
personCount++;
}
返回新的PeopleViewModel(item,personCount);
}));
};
var PeopleViewModel=函数(数据,个人帐户){
var _self=这个;
_self.Name=ko.observable(data.Name);
_self.IsResting=ko.可观察(data.IsResting);
_self.PersonIndex=ko.可观察(personCount);
};
应用绑定(新视图模型(数据));
function ViewModel() {
var self = this;
self.people = ko.observableArray();
self.getIndexForMan = function(man) {
if (man.isresting) {
return null;
}
var index = 1;
var rawPeople = self.people();
for (var i = 0; i < rawPeople.length; i++) {
if (rawPeople[i] == man) {
break;
}
if (!rawPeople[i].isresting) {
index++;
}
}
return index;
}
};
var model = new ViewModel();
model.people(data);
ko.applyBindings(model);
<table data-bind="foreach: PeopleMap">
<tr>
<td>
<span data-bind="text: PersonIndex, visible: !IsResting()"></span>
</td>
<td data-bind="text: Name"></td>
<td data-bind="text: IsResting"></td>
</tr>
</table>
var ViewModel = function (theData) {
var _self = this;
var personCount = 0;
_self.PeopleMap = ko.observableArray(
ko.utils.arrayMap(theData, function (item) {
if(!item.isresting){
personCount++;
}
return new PeopleViewModel(item, personCount);
}));
};
var PeopleViewModel = function (data, personCount) {
var _self = this;
_self.Name = ko.observable(data.name);
_self.IsResting = ko.observable(data.isresting);
_self.PersonIndex = ko.observable(personCount);
};
ko.applyBindings(new ViewModel(data));