Also, ich habe für die vergangene Woche mit hohen Charts und KO zu spielen. Die Syntax für das High-Charts-Diagramm ist sehr einfach und leicht zu lesen.knockoutJS dynamische Grafik mit hohen Charts
ich aus Java, und ich bin ziemlich neu in JS, also bin ich nicht sicher, wie wirklich mit dem Umfang zu spielen.
Gibt es trotzdem oder Knockout leicht mit hohen Charts kombinieren zu verwenden, um ein dynamisches Diagramm zu machen? Kann ich sie einfach in dieselbe JS-Datei einfügen?
Die hohe Charts Code sieht so einfach es eine einfache Lösung sein! Vielen Dank im Voraus für die Eingabe/Hilfe! Hier
ist der Code für meine High-Charts Graph:
$(function() {
var chart;
//alert(users);
$(document).ready(function() {
chart = new Highcharts.Chart({
chart : {
renderTo : 'container',
type : 'line',
marginRight : 130,
marginBottom : 25
},
title : {
text : 'Body Weight',
x : -20 //center
},
xAxis : {
categories : ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
},
yAxis : {
title : {
text : 'Weight (lbs)'
},
plotLines : [{
value : 0,
width : 1,
color : '#808080'
}]
},
tooltip : {
formatter : function() {
return '<b>' + this.series.name + '</b><br/>' + this.x + ': ' + this.y + 'lbs';
}
},
legend : {
layout : 'vertical',
align : 'right',
verticalAlign : 'top',
x : -10,
y : 100,
borderWidth : 0
},
series : [{
name : 'George',
data : [185,190,185,180]
}, {
name : 'Bindu',
data : [115,110,112,115]
}, {
name : 'Phil',
data : [195,190,190,185]
}]
});
});
});
Und hier ist mein KO Modell:
/*
* Reading class
* containts health readings
*/
function Reading(date,weight,glucose)
{
var self = this;
self.date=ko.observable(date);
self.weight=ko.observable(weight);
self.glucose=ko.observable(glucose);
self.readingId=ko.observable(0);
self.formattedWeight = ko.computed(function(){
var formatted = self.weight();
return formatted+" lb"
});
}
/*
* User class
* contains a user name, date, and an array or readings
*/
function User(name,date,readings) {
var self = this;
self.name = name;
self.date = date;
self.userId = ko.observable(0);
self.readingsArray = ko.observableArray([
new Reading(99,22,88),new Reading(11,22,33)
]);
}
// Overall viewmodel for this screen, along with initial state
function userHealthModel() {
var self = this;
self.inputWeight = ko.observable();
self.inputDate = ko.observable();
self.inputId = ko.observable();
self.inputGlucose = ko.observable();
// Operations
self.subscribe = function(){
var users = this.users();
for(var x = 0; x < users.length; x++)
{
self.users()[x].userId(x);
}
}
self.addUser = function(){
self.users.push(new User("",0,0,(new Reading(0,0))));
self.subscribe();
}
self.removeUser = function(userName){
self.users.remove(userName);
self.subscribe();}
//adds a readings to the edittable array of readings (not yet the reading array in a user)
self.addReading = function(){
var iD = self.inputId();
var date = self.inputDate();
var weight = self.inputWeight();
var glucose = self.inputGlucose();
if((weight&&date)||(glucose&&date))
{
self.users()[iD].readingsArray.push(new Reading(date,weight,glucose));
self.readings.push(new Reading(date,weight,glucose));
}
else{
alert("Please complete the form!")
}
}
self.removeLastReading = function(userName){
var lastIndex = (userName.readingsArray().length)-1;
var removeThisReading = userName.readingsArray()[lastIndex];
userName.readingsArray.remove(removeThisReading);
}
//editable data
self.readings = ko.observableArray([
new Reading(12,99,3),new Reading(22,33,2),
new Reading(44,55,3)
]);
self.users = ko.observableArray([
new User("George",2012),new User("Bindu",2012)
]);
self.subscribe();
}
wow das ist genial! Ich blätterte sehr schnell durch die HC-Dokumente. Ich wünschte, sie hätten auch eine addPoint-Methode! –
wie für die Subskriptions-Sache ... also grundsätzlich, wenn das Array aktualisiert wird der viewModel.usersSubscribe (function() {}); würde Rennen? Das scheint ein sauberer Weg zu sein. danke nochmal capn! Zum zweiten Mal in dieser Woche hast du eine meiner Fragen beantwortet! –
Ja, ich denke, das ist der beste Ansatz.BTW gibt es eine Add-Point-Methode http://www.highcharts.com/demo/dynamic-click-to-add können Sie series.addPoint ([x, y]) – madcapnmckay