【发布时间】: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