【问题标题】:Knockout binding not updating in html敲除绑定未在 html 中更新
【发布时间】:2020-10-08 15:52:42
【问题描述】:

我一直在从事一个项目,该项目使用敲除将数据绑定从 javascript 到 html。我也在使用 ajax 从 PLC 读取数据,来自 ajax 请求的数据将放入淘汰视图模型并显示在网页上。我在更新数据绑定时遇到了一些麻烦。 我在互联网上搜索了帮助,但到目前为止没有找到任何对我有帮助的东西,所以我希望你能进一步帮助我。

我在 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 在视图模型中被定义,所以这是有效的。但是现在我想使用 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 页面上它没有改变。我不确定为什么它不起作用我一直在寻找一些解决方案,但没有找到任何有效的方法。

【问题讨论】:

  • viewModel.Testvar(data.variables[0].value)
  • 嗨@Verab,欢迎。敲除 observables 要记住的是,它们是需要调用才能将数据输入和输出的函数。像 viewModel.Testvar = data.variables[0].value 这样分配结果将导致 observable 函数被覆盖,不再绑定到 html 输出。
  • 谢谢! @peinearydevelopment 的解决方案奏效了。 Nathan Fisher 感谢您提供的额外信息。

标签: javascript jquery ajax knockout.js


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2014-06-27
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-10
    相关资源
    最近更新 更多