Knockout.js 在每次更新后获得淘汰赛的可观测日长度
所以我有这个:Knockout.js 在每次更新后获得淘汰赛的可观测日长度,knockout.js,observablecollection,Knockout.js,Observablecollection,所以我有这个: function appViewModelRecord() { var self = this; self.returnedDataRecord = ko.observableArray([]); self.table_name = ko.observable(); self.counta = ko.observable();
function appViewModelRecord() {
var self = this;
self.returnedDataRecord = ko.observableArray([]);
self.table_name = ko.observable();
self.counta = ko.observable();
self.countb = ko.observable();
self.diff = ko.observable();
//
self.update = function() {
$.getJSON("@Url.HttpRouteUrl("ActionApi",new {controller="check",action="recordcount"})", function (data) {
$('#heartRecords').fadeTo(400, 1);
var mappedData = $.map(data, function (item) {
item.diff = item.counta - item.countb;
return new recordData(item);
});
self.returnedDataRecord(mappedData);
$('.badge').html(moment().format('DD/MM/YYYY HH:mm:ss'));
$('#heartRecords').fadeTo(400, 0);
});
});
};
}
我是这样使用它的:
var viewModelRecord = new appViewModelRecord();
updateData();
window.setInterval(updateData, 30000);
ko.applyBindings(viewModelRecord,document.getElementById('tableRecords'));
//
function updateData() {
viewModelRecord.update();
}
我希望在每次更新中检查returnedDataRecord arrat是否有0条记录,以便有一个直观的指示
我该怎么做
更新:
视图模型:
function appViewModelRecord() {
var self = this;
self.returnedDataRecord = ko.observableArray([]);
self.table_name = ko.observable();
self.counta = ko.observable();
self.countb = ko.observable();
self.diff = ko.observable();
//
self.update = function() {
$.getJSON("@Url.HttpRouteUrl("ActionApi",new {controller="check",action="recordcount"})", function (data) {
$('#heartRecords').fadeTo(400, 1);
var mappedData = $.map(data, function (item) {
item.diff = item.counta - item.countb;
return new recordData(item);
});
self.returnedDataRecord(mappedData);
$('.badge').html(moment().format('DD/MM/YYYY HH:mm:ss'));
$('#heartRecords').fadeTo(400, 0);
});
};
self.howMany = ko.computed(function () {
return self.returnedDataRecord().length;
});
}
以及更新功能:
function updateData() {
viewModelRecord.update();
if (viewModelRecord.howMany() == 0) {
$('#noRecords').fadeTo(400, 1);
} else {
$('#noRecords').fadeTo(400, 0);
}
}
而且我有“记录”计数。唯一的问题是它第一次的值为0
更新2:
按照上面的代码,这是我的主脚本:
var viewModel = new appViewModel();
var viewModelRecord = new appViewModelRecord();
ko.applyBindings(viewModel,document.getElementById('tablePallets'));
ko.applyBindings(viewModelRecord, document.getElementById('tableRecords'));
window.setInterval(updateData, 30000);
updateData();
就这样,我第一次没有得到计数
self.howMany = ko.computed(function () {
return self.returnedDataRecord().length;
});
添加项
函数MyViewModel(){
var self=这个;
self.items=ko.observearray();
self.count=ko.computed(函数(){
返回self.items().length;
});
self.addItem=函数(){
self.items.push(“项目”);
}
}
应用绑定(新的MyViewModel());
您可以使用ko.computed()返回集合的长度或对其进行任何检查。我希望能够在主脚本中使用它。我可以这样做?当然,你可以像普通的observable一样使用它。我还以为你想直接将它绑定到html元素。@Yevgeniy.Chernobrivets我想能够在updateData()中使用数组的长度。怎么做?这会创建计数,但在第一次时它不会更新。看看修改后的fiddle:是的,因为您已经创建了新的ViewModel,但绑定添加到了另一个ViewModel上。我已经更新了你的示例操作系统。但是我的情况仍然是一样的,看看我帖子中的update2。关于“update2”看起来不错,但是
self。应该有多少个。是的,我刚刚添加到帖子中。看看update,我还有更新的功能。。。
<span data-bind="text: count"></span>
<button data-bind="click: addItem">Add Item</button>
function MyViewModel() {
var self = this;
self.items = ko.observableArray();
self.count = ko.computed(function() {
return self.items().length;
});
self.addItem = function(){
self.items.push("item");
}
}
ko.applyBindings(new MyViewModel());