I cannot get the load average data in this Oracle JET test to update the knockout.js data-bindings unless I refresh the page.
I have tried both using the JS timer setInterval() method and also just clicking in and out of the incidents view, but no joy. The data never updates after initializing unless I manually reload the page.
Anyone have any ideas?
/*
* Your incidents ViewModel code goes here
*/
define([
"ojs/ojcore",
"knockout",
"jquery",
"text!data/data.json",
"ojs/ojchart"
], function(oj, ko, $, file) {
function IncidentsViewModel() {
var self = this;
self.load1 = ko.observable();
self.load5 = ko.observable();
self.load10 = ko.observable();
self.allprocs = ko.observable();
self.lastpid = ko.observable();
var n = 0;
var query = { loadavg: "1" };
var items = new Array();
setInterval(function() {
$.getJSON("https://www.unix.com/ojet.php", query, function(json) {
console.log(JSON.stringify(json));
$.each(json, function(key, val) {
n++;
switch (n) {
case 1:
self.load1 = ko.observable(val);
break;
case 2:
self.load5 = ko.observable(val);
break;
case 3:
self.load10 = ko.observable(val);
break;
case 4:
self.allprocs = ko.observable(val);
break;
case 5:
self.lastpid = ko.observable(val);
break;
default:
}
// console.log("success items " + items.length + " " + val);
});
})
// self.datasource = ko.observableArray(items);
.done(function() {
console.log("second success");
})
.fail(function() {
console.log("error");
})
.always(function() {
console.log("complete");
});
}, 5000);
var data = JSON.parse(file);
self.datasource = ko.observableArray(data);
// Below are a set of the ViewModel methods invoked by the oj-module component.
// Please reference the oj-module jsDoc for additional information.
/**
* Optional ViewModel method invoked after the View is inserted into the
* document DOM. The application can put logic that requires the DOM being
* attached here.
* This method might be called multiple times - after the View is created
* and inserted into the DOM and after the View is reconnected
* after being disconnected.
*/
self.connected = function() {
// Implement if needed
};
/**
* Optional ViewModel method invoked after the View is disconnected from the DOM.
*/
self.disconnected = function() {
console.log(" self.disconnected = function()");
// Implement if needed
};
/**
* Optional ViewModel method invoked after transition to the new View is complete.
* That includes any possible animation between the old and the new View.
*/
self.transitionCompleted = function() {
// Implement if needed
};
}
/*
* Returns a constructor for the ViewModel so that the ViewModel is constructed
* each time the view is displayed. Return an instance of the ViewModel if
* only one instance of the ViewModel is needed.
*/
return new IncidentsViewModel();
});
Based on suggestion from Andrew Bennett to change:
self.variable = ko.observable(newVal) to self.variable(newVal)
Still does not update.....
/**
* @license
* Copyright (c) 2014, 2018, Oracle and/or its affiliates.
* The Universal Permissive License (UPL), Version 1.0
*/
/*
* Your incidents ViewModel code goes here
*/
define([
"ojs/ojcore",
"knockout",
"jquery",
"text!data/data.json",
"ojs/ojchart"
], function(oj, ko, $, file) {
function IncidentsViewModel() {
var self = this;
self.load1 = ko.observable();
self.load5 = ko.observable();
self.load10 = ko.observable();
self.allprocs = ko.observable();
self.lastpid = ko.observable();
var n = 0;
var items = new Array();
setInterval(function() {
var query = { loadavg: "1" };
$.getJSON("https://www.unix.com/ojet.php", query, function(json) {
console.log(JSON.stringify(json));
$.each(json, function(key, val) {
n++;
switch (n) {
case 1:
self.load1(val);
break;
case 2:
self.load5(val);
break;
case 3:
self.load10(val);
break;
case 4:
self.allprocs(val);
break;
case 5:
self.lastpid(val);
break;
default:
}
// console.log("success items " + items.length + " " + val);
});
})
// self.datasource = ko.observableArray(items);
.done(function() {
console.log("second success");
})
.fail(function() {
console.log("error");
})
.always(function() {
console.log("complete");
});
}, 5000);
var data = JSON.parse(file);
self.datasource = ko.observableArray(data);
// Below are a set of the ViewModel methods invoked by the oj-module component.
// Please reference the oj-module jsDoc for additional information.
/**
* Optional ViewModel method invoked after the View is inserted into the
* document DOM. The application can put logic that requires the DOM being
* attached here.
* This method might be called multiple times - after the View is created
* and inserted into the DOM and after the View is reconnected
* after being disconnected.
*/
self.connected = function() {
// Implement if needed
};
/**
* Optional ViewModel method invoked after the View is disconnected from the DOM.
*/
self.disconnected = function() {
console.log(" self.disconnected = function()");
// Implement if needed
};
/**
* Optional ViewModel method invoked after transition to the new View is complete.
* That includes any possible animation between the old and the new View.
*/
self.transitionCompleted = function() {
// Implement if needed
};
}
/*
* Returns a constructor for the ViewModel so that the ViewModel is constructed
* each time the view is displayed. Return an instance of the ViewModel if
* only one instance of the ViewModel is needed.
*/
return new IncidentsViewModel();
});
OK... fixed because of the "n" var (used to help parse the JSON) in the wrong location:
/**
* @license
* Copyright (c) 2014, 2018, Oracle and/or its affiliates.
* The Universal Permissive License (UPL), Version 1.0
*/
/*
* Your incidents ViewModel code goes here
*/
define([
"ojs/ojcore",
"knockout",
"jquery",
"text!data/data.json",
"ojs/ojchart"
], function(oj, ko, $, file) {
function IncidentsViewModel() {
var self = this;
self.load1 = ko.observable();
self.load5 = ko.observable();
self.load10 = ko.observable();
self.allprocs = ko.observable();
self.lastpid = ko.observable();
var items = new Array();
setInterval(function() {
var query = { loadavg: "1" };
$.getJSON("https://www.unix.com/ojet.php", query, function(json) {
console.log(JSON.stringify(json));
var n = 0;
$.each(json, function(key, val) {
n++;
switch (n) {
case 1:
self.load1(val);
break;
case 2:
self.load5(val);
break;
case 3:
self.load10(val);
break;
case 4:
self.allprocs(val);
break;
case 5:
self.lastpid(val);
break;
default:
}
// console.log("success items " + items.length + " " + val);
});
})
// self.datasource = ko.observableArray(items);
.done(function() {
console.log("second success");
})
.fail(function() {
console.log("error");
})
.always(function() {
console.log("complete");
});
}, 5000);
var data = JSON.parse(file);
self.datasource = ko.observableArray(data);
// Below are a set of the ViewModel methods invoked by the oj-module component.
// Please reference the oj-module jsDoc for additional information.
/**
* Optional ViewModel method invoked after the View is inserted into the
* document DOM. The application can put logic that requires the DOM being
* attached here.
* This method might be called multiple times - after the View is created
* and inserted into the DOM and after the View is reconnected
* after being disconnected.
*/
self.connected = function() {
// Implement if needed
};
/**
* Optional ViewModel method invoked after the View is disconnected from the DOM.
*/
self.disconnected = function() {
console.log(" self.disconnected = function()");
// Implement if needed
};
/**
* Optional ViewModel method invoked after transition to the new View is complete.
* That includes any possible animation between the old and the new View.
*/
self.transitionCompleted = function() {
// Implement if needed
};
}
/*
* Returns a constructor for the ViewModel so that the ViewModel is constructed
* each time the view is displayed. Return an instance of the ViewModel if
* only one instance of the ViewModel is needed.
*/
return new IncidentsViewModel();
});