knockout.js HTML中的Knockout绑定未更新

ovfsdjhp  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(198)

我一直在做一个使用knockout从javascript到html进行数据绑定的项目。我也在使用 AJAX 从PLC阅读数据,来自ajax请求的数据将被放入knockout视图模型并显示在网页上。我在更新数据绑定时遇到了一些麻烦。我在互联网上搜索了帮助,但到目前为止没有找到任何帮助我的东西,所以我希望你能进一步帮助我。
我已经在一个javascript文件中设置了视图模型,如下所示:

function AppViewModel() {
    var self = this;
    self.hmitags = ko.observableArray(groupDataValues);
    self.Capa100 = ko.observable("Cap100");
    self.Testvar = ko.observable(50);
}
var viewModel = new AppViewModel();
ko.applyBindings(viewModel);

并将数据绑定到html文件中:<span data-bind="text: Testvar></span>
当我现在加载html文件时,我看到值50在viewmodel中定义,所以这是有效的。但是现在我想使用 AJAX 从我的PLC中读取一个变量,这是通过同一个javascript文件中的一个函数完成的。下面是函数的外观:

function ReadVariable()// function for reading out individual variables
{
    // list can contain only one variable
    var HMIReadList = "&paths=MainInstance.Testvar"
    data.length = 0; // get rid of the data from the last query
    // issue the data request
    $.ajaxSetup({
        beforeSend: function (xhr) {
            xhr.setRequestHeader('Authorization', 'Bearer ' + BearerToken);
        }
    });
    $.ajax({
        type: "GET",
        url: baseurl + "_pxc_api/api/variables?pathPrefix=Arp.Plc.Eclr/" + HMIReadList,
    })
        .done(function (data, status, jqXHR) {
            viewModel.Testvar = data.variables[0].value;
            console.log(viewModel.Testvar);
        })
        .fail(function (jqXHR, status, errorThrown) {
            console.log("CreateSession Error: " + errorThrown);
            console.log("Status: " + status);
            console.dir(jqXHR);
            alert("CreateSession $.ajax failed. Status: " + status);
        });;
}

我正在使用html页面中的一个按钮调用此函数。在控制台中,我可以看到它正在从PLC阅读一个值,并且它与初始值50不同。但在html页面上,它没有变化。我不确定为什么它不工作。我一直在寻找一些解决方案,但没有发现任何工作。

vwkv1x7d

vwkv1x7d1#

剔除可观察值是一个函数。为了更新可观察值的值,您需要使用新值调用函数,如下所示:viewModel.Testvar(data.variables[0].value)

相关问题