Javascript 多对象剔除映射
希望一些knockout.js大师能对此有所启发 我试图让Contact对象进入Contact observable数组,它本身就是ContactGroup对象中的一个observable数组,但我不知道如何做到这一点?这是可能的,还是我走错了路?谢谢Javascript 多对象剔除映射,javascript,knockout.js,Javascript,Knockout.js,希望一些knockout.js大师能对此有所启发 我试图让Contact对象进入Contact observable数组,它本身就是ContactGroup对象中的一个observable数组,但我不知道如何做到这一点?这是可能的,还是我走错了路?谢谢 var json = {"contactGroups" : [ { "name" : "Contact Group", "contact" : [
var json =
{"contactGroups" : [
{
"name" : "Contact Group",
"contact" : [
{
"name" : "aaaa",
"email" : "",
"telephone" : "",
"mobile" : "",
"mail_group" : "",
"comment" : ""
},
{
"name" : "bbbb",
"email" : "",
"telephone" : "",
"mobile" : "",
"mail_group" : "",
"comment" : ""
},
{
"name" : "cccc",
"email" : "",
"telephone" : "",
"mobile" : "",
"mail_group" : "",
"comment" : ""
}
]
}
]}
function TechnicalViewModel(){
self = this;
var ContactGroups = ko.utils.arrayMap(json.contactGroups, function(item) {
var group = new ContactGroup(item);
var contacts = ko.utils.arrayMap(item.contact, function(item) {
return new Contact(item)
});
group.contact(contacts)
return group;
})
self.contactGroups(ContactGroups)
function ContactGroup(data){
var self = this;
self.name = ko.observable(data.name);
self.contact = ko.observableArray([]);
function Contact(data){
this.name = ko.observable(data.name);
this.email = ko.observable(data.email);
this.telephone = ko.observable(data.telephone);
this.mobile = ko.observable(data.mobile);
this.mail_group = ko.observable(data.mail_group);
this.comment = ko.observable(data.comment);
}
}
}
TechnicalView = new TechnicalViewModel
ko.applyBindings(TechnicalView);
您必须将
联系人
功能移到联系人组
功能之外。它的范围限制在ContactGroup
函数中,无法被ko.utils.arrayMap
函数看到。将其移到外部会增加整个TechnicalViewModel
的范围
function TechnicalViewModel(jsonData){
self = this;
var ContactGroups = ko.utils.arrayMap(jsonData.contactGroups, function(item) {
var group = new ContactGroup(item);
var contacts = ko.utils.arrayMap(item.contact, function(item) {
return new Contact(item)
});
group.contact(contacts)
return group;
});
self.contactGroups = ko.observableArray(ContactGroups);
function Contact(data) {
this.name = ko.observable(data.name);
this.email = ko.observable(data.email);
this.telephone = ko.observable(data.telephone);
this.mobile = ko.observable(data.mobile);
this.mail_group = ko.observable(data.mail_group);
this.comment = ko.observable(data.comment);
}
function ContactGroup(data){
var self = this;
self.name = ko.observable(data.name);
self.contact = ko.observableArray([]);
}
}
var technicalVM = new TechnicalViewModel(json);
ko.applyBindings(technicalVM);
看一看,看一看
ko.mapping.formJS允许这样做:
function Contact(data){
this.name = ko.observable(data.name);
this.email = ko.observable(data.email);
this.telephone = ko.observable(data.telephone);
this.mobile = ko.observable(data.mobile);
this.mail_group = ko.observable(data.mail_group);
this.comment = ko.observable(data.comment);
}
一行:
function Contact(data){
ko.mapping.fromJS(data, {}, this);
}
当您希望基于服务器上的新数据刷新viewmodel时,ko.mapping.fromJS也很强大
希望能有帮助。非常感谢!需要重新检查一下我的范围!