Привязка нокаута не обновляется в html - PullRequest
1 голос
/ 18 июня 2020

Я работал над проектом, который использует нокаут для привязки данных от javascript к html. Я также читаю данные из PL C, используя ajax, данные из запроса ajax будут помещены в модель просмотра нокаута и показаны на веб-странице. У меня проблемы с обновлением привязки данных. Я искал в inte rnet помощь, но пока не нашел ничего, что помогло бы мне, поэтому я надеюсь, что вы можете мне помочь.

Я настроил модель просмотра, как показано ниже, внутри файла 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, как определено в модели просмотра, так что работает. Но теперь я хочу прочитать переменную из моего PL C, используя ajax, что выполняется с помощью функции внутри того же файла 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 для вызова этой функции. В консоли я вижу, что он считывает значение из PL C и что оно отличается от начального значения 50. Но на странице html оно не меняется. Я не уверен, почему это не работает. Я искал некоторые решения, но не нашел ничего, что работает.

1 Ответ

0 голосов
/ 19 июня 2020

Наблюдаемое выбивание - это функция. Чтобы обновить значение наблюдаемого, вам необходимо вызвать функцию с новым значением следующим образом: viewModel.Testvar(data.variables[0].value)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...