Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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
Knockout.js 在每次更新后获得淘汰赛的可观测日长度_Knockout.js_Observablecollection - Fatal编程技术网

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());