我从WCF服务获取数据,然后映射,并将数据与我的DOM对象绑定:
var PayinyVM = {};
$.getJSON('/service/PaidService.svc/PaidList', function (data) {
var tmp = JSON.stringify(data.d);
PayinyVM.model = ko.mapping.fromJSON(tmp);
ko.applyBindings(PayinyVM);
});
结果在我的DOM上显示为例外,将其绑定到模型。我无法找到的是如何添加一些计算的observable,假设我的数据是返回具有FirstName和LastName的人,如何使用FN +''+ LN创建计算的可观察FullName。
答案 0 :(得分:9)
这是你小提琴的工作副本,我不得不做出很多假设,因为你的小提琴甚至不是正确的javascript,似乎很困惑,甚至没有引用淘汰赛
var PaidPeople = function(data) {
var self = this;
ko.mapping.fromJS(data, {}, this);
this.fullName = ko.computed(function () {
return self.Name() + " : just ";
});
}
var PayinyVM = function (data) {
var self = this;
ko.mapping.fromJS(data, {
'model' : {
create: function(options) {
return new PaidPeople(options.data);
}
}
}, self);
};
var data = {model:[{__type: "PaidPeople:#model", Amount:110, Attendee:1, Name:'John'}]};
ko.applyBindings(new PayinyVM(data));
和一个有效的小提琴:http://jsfiddle.net/qeUHd/
答案 1 :(得分:4)
您可以通过创建内部映射的模型对象来反转映射。
var PayinyVM = function (data) {
var self = this;
ko.mapping.fromJS(data, {}, self);
this.fullName = ko.computed(function () {
return self.Name() + " : just ";
});
};
$.getJSON('/service/PaidService.svc/PaidList', function (data) {
ko.applyBindings(new PayinyVM(data.d));
});
希望这有帮助。
答案 2 :(得分:2)
结果我必须在javascript中定义所有视图模型属性,以便knockout可以在使用服务器数据更新之前使用属性初始化视图模型
var model = {
username : ko.observable(),
get_student_info : ko.mapping.fromJS(
{
usr_lname : null,
usr_fname : null,
gender : null,
dob : null
},
{
create: function(options) {
return (new (function () {
this.name = ko.computed(function () {
if (this.usr_lname == undefined || this.usr_fname == undefined)
return null;
else
return this.usr_lname() + ' ' + this.usr_fname();
}, this);
// let the ko mapping plugin continue to map out this object, so the rest of it will be observable
ko.mapping.fromJS(options.data, {}, this);
}));
}
}
)
};