我需要将projectLine数组添加到从json对象返回的值。我尝试了以下方法,但它没有用。
function ViewModel() {
var self = this;
this.CheckIn = ko.observable();
this.CheckOut = ko.observable();
this.Lunch = ko.observable();
this.dateEntered = ko.observable();
this.isDateValidate = ko.observable();
this.Rest = ko.observable();
this.projectLine = ko.observableArray([new projectsWorked()]);
// problem occurs in this function
this.displayData = function () {
var date = self.dateEntered();
$.ajax({
type: "POST",
url: 'TimeRecord.aspx/ReturnProjectDetail',
data: "{'date':" + JSON.stringify(date) + "}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (arg) {
self.CheckIn(arg.d.CheckIn.Hours + ":" + arg.d.CheckIn.Minutes);
self.CheckOut(arg.d.CheckOut.Hours + ":" + arg.d.CheckOut.Minutes);
self.Lunch(arg.d.Lunch.Hours + ":" + arg.d.Lunch.Minutes);
self.Rest(arg.d.Rest.Hours + ":" + arg.d.Rest.Minutes);
// problem is here.
for (var i = 0; i < arg.d.WorkedProjects.length ; i++) {
self.projectLine.selectedProject(arg.d.WorkedProjects[i].ProjectCode);
self.projectLine.Hours(arg.d.WorkedProjects[i].Hours);
}
},
error: function (arg) {
alert('fail ');
}
});
};
};
function projectsWorked() {
var self = this;
this.projectEnable = ko.observable(false);
this.Projects = ko.observableArray();
this.hours = ko.observable();
this.projectWork=ko.computed(function () {
// return parseFloat($('#txthour').val());
return this.hours();
}, this);
this.selectedProject = ko.observable();
this.GetProjects = function () {
$.ajax({
type: "POST",
url: 'TimeRecord.aspx/ReturnComplexType',
data: {},
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (arg) {
for (var i = 0; i < arg.d.length ; i++) {
self.Projects.push(arg.d[i].ProjectCode);
}
},
error: function (arg) {
}
});
};
};
ko.applyBindings(new ViewModel());
答案 0 :(得分:1)
您需要使用observableArray的push函数。
for (var i = 0; i < arg.d.WorkedProjects.length ; i++) {
// seems strange : did you add an selectedProject function to the self.projectLine observable array ?
self.projectLine.selectedProject(arg.d.WorkedProjects[i].ProjectCode);
self.projectLine.Hours(arg.d.WorkedProjects[i].Hours);
var newProjectsWorked =new projectsWorked();
// setup your new projects worked
newProjectsWorked.hours(arg.d.WorkedProjects[i].Hours);
// then add it to the list
this.projectLine.push(newProjectsWorked);
}
我希望它有所帮助。
答案 1 :(得分:0)
您的self.projectLine
是ko.observableArray()
。您正尝试通过self.projectLine.SomeProperty
访问它。那不行。
您可以访问以下内容:self.projectLine()[index].Hours(...)
等。