如何使用视图模型控制器方法解析和绑定backbone.js中的复杂JSON
我使用一个复杂的JSON结构作为一个Ajax调用的结果。这里我需要在一个父模型中使用许多不同类型的嵌套模型。对于每个人,我使用一个EmployeeContext。我需要这个作为我的父母模型。 在这个EmployeeContext中,我需要许多具有关联模型的不同集合。示例:我有一个名为expenseContextCollection的集合,其模型为expense,模型为travel。 我需要显示每个模型的详细信息,并且需要更新相同的模型并保存回mongo数据库 目前,我正在使用一个用于模型EmployeeModel.js的文件,一个用于视图EmployeeView.js的文件,一个用于模板EmployeePage.html的文件。 在EmployeeView.js文件中,我将设置ajax调用模型的结果如何使用视图模型控制器方法解析和绑定backbone.js中的复杂JSON,backbone.js,handlebars.js,marionette,backbone-views,backbone-routing,Backbone.js,Handlebars.js,Marionette,Backbone Views,Backbone Routing,我使用一个复杂的JSON结构作为一个Ajax调用的结果。这里我需要在一个父模型中使用许多不同类型的嵌套模型。对于每个人,我使用一个EmployeeContext。我需要这个作为我的父母模型。 在这个EmployeeContext中,我需要许多具有关联模型的不同集合。示例:我有一个名为expenseContextCollection的集合,其模型为expense,模型为travel。 我需要显示每个模型的详细信息,并且需要更新相同的模型并保存回mongo数据库 目前,我正在使用一个用于模型Empl
initialize: function(instance) {
this.model.set({
"travelContext": ajaxResponse.EmployeeContext.travellContextCollection
});
this.model.set({
"expenseContext": ajaxResponse.EmployeeContext.expenseContextCollection
});
this.render();
}
但是我需要这个travelContext作为一个主干集合,这样我就可以循环使用它并从中获取每个旅行模型
如何使用backbone.js中的模型视图收集方法处理这种情况
以下是JSON结构的一个示例:
{
"EmployeeContext": {
"expenseContextCollection": [{
"currencyType": "INR",
"empID": "00123456",
"imageID": "d69ce74a9b4e075d2111cf0619e27c503d",
"toDate": "11-12-2015",
"billDate": "11-12-2015"
}, {
"currencyType": "INR",
"empID": "00123456",
"imageID": "ab2f78d9f9e7897b4a11c5bc82618d09f4",
"toDate": "25-01-2016",
"billDate": "20-01-2016",
}],
"claimContextCollection": [],
"travellContextCollection": [{
"empID": "00123456",
"isOneWay": true,
"eligibility": "true",
"createTravelRequest": {
"purposeOfTravelDetailsCollection": [{
"isPrimary": "true",
"purposeOfTravel": "Trans",
"leadOpportunity": "BAA12346",
"account": "BASS"
}],
"travelDetailsCollection": [{
"travelToCity": "BANGALORE",
"travelType": "DTR",
"travelTime": "",
"travelFromCity": "CHENNAI",
"checkoutDate": "25-01-2016",
"travelDate": "20-01-2016",
"travelTo": "INDIA",
"travelFrom": "INDIA"
}],
"Preference": {
"empnum": "00123456",
"employeeProfilePreference": {
"emergencyContacCity": "9412345678",
"travelSeatPreference": "aisle",
"smsNotification": "true",
"emergencyContactNumber": "9412345678",
"frequentFlierPreference": {
"frequentFlierNo": "EJK7861",
"frequentFlierAirlines": "Virgin"
},
"employeeContactNumber": "8712345678",
"emergencyContactPerson": "Moll Mathew",
"emergencyContactAddress": "KOOODC",
"travelMealPreference": "vegetarian"
}
},
"otherDetails": {
"smsNotification": true,
"forexAmount": "0",
"forexRequiredDate": "20141002",
"employeeContactNumber": "00123456",
"billable": "true"
},
"emergencyContactDetails": {
"emergencyContacCity": "KOOODC",
"emergencyContactNumber": "9412345678",
"emergencyContactPerson": "Moll Mathew",
"emergencyContactAddress": "KOOODC"
}
},
"billSubmissionMode": "manual",
"travelClass": "Economy",
"access_token": "",
"travelEndDate": "25-01-2016",
"timeStamp": "2015-12-11 16:00:47.395",
"travelType": "DTR",
"travelID": "3000553702",
"travelStartDate": "20-01-2016",
"approvalGIMS": "approvalGIMS",
"expenseCodes": {
"ExpenseTypeCollection": [{
"travelType": "DTR",
"client": "200",
"expenseDescription": "LODGING",
"glAccount": "0000834110",
"lastChangedBy": "",
"expenseCode": "DCN",
"changedOn": "0000-00-00",
"expenseStatus": "ACTIVE"
}, {
"travelType": "DTR",
"client": "200",
"expenseDescription": "BUSINESS",
"glAccount": "0000839301",
"lastChangedBy": "",
"expenseCode": "DMT",
"changedOn": "0000-00-00",
"expenseStatus": "ACTIVE"
}],
"ErrorCodeCollection": [{
"ErrorText": "S",
"ErrorType": "S"
}]
},
"empEmailID": "jaiseephen@gmail.com",
"entry_type": "new_entry",
"approvalBFM": "approverBFM",
"status": "Pending for Expense"
}],
"location_contextCollection": [{
"Status": "success"
}],
"user_context": {
"timeStamp": "2015-12-11 16:00:47.754",
"access_token": "",
"empID": "00123456",
"buDetailsCollection": [{
"buHeadADID": "",
"buHeadName": "",
"buHeadEmail": ""
}],
"empTechManager": {
"techMgrEmpID": "",
"techMgrADID": "",
"techMgrName": "",
"techMgrEmail": ""
},
"empPassportDetails": {
"endDate": "",
"dateOfBirthAsOfPassport": "0000-00-00",
},
"empDetails": {
"secondSupervisorEmpNumber": "00000000",
"empDOB": "15.05.1999",
},
"empEmailID": "jaiseephen@gmail.com",
"supDetailsCollection": [{
"ADID": "FAMM",
"supADID": "FAMM",
"supEmail": "fazee_ammed@gmail.com",
"lastName": "Faz Mammed",
"supCostCenter": "",
"Email": "fazee_ammed@gmail.com",
"CostCenter": "",
"empNumber": "00678444",
"supEmpID": "00678444",
"supName": "Faz Mammed",
"Name": "Faz Mammed"
}],
"altSupDetailsCollection": [{
"supADID": "FAMM",
"supEmail": "fazee_ammed@gmail.com",
"supEmpID": "00678444",
"supName": "Faz Mammed"
}]
}
}
}
我相信最简单的解决方案是parse JSON.parsetext。然后,您可以在主干模型中使用该对象,如下所示:
var obj = JSON.parse(income);
obj.EmployeeContext.travellContextCollection[0]
对于查找目标值,您还可以创建搜索目标节点的功能。嗨,Alexander,非常感谢您的快速回复。我使用的方法与您与我分享的方法相同。我将此更新为问题本身的一部分。我使用车把从中获取数据,如下所示。{{travellContextCollection}{@index}{{this.empID}{/travellContextCollection}我用它来显示所有travellContext的empID,并在下拉列表中显示相同的empID。现在假设我在每个travellContext中有3个字段,在一个travellContextCollection中有两个这样的travellContext,如果我想显示TravelContext的details3字段,其中empID=myEmployeeID是从已经填充的下拉列表中选择的,我将如何实现?如果我将TravelContextCollection作为主干中的一个集合,并且如果我可以循环使用它并根据模型获取每个TravelContext,那就可以了,对吗?有没有这样的解决办法//下面是使用CodeTravelContextCollection:[{empID:00123456,empName:name1,empAddress:name1Address},{empID:002222,empName:name2,empAddress:name2Address}]的解释,所以下拉列表将包含以下数据001234560222myEmployeeId,如果我选择002222,我应该能够编辑{empID:0022222,empName:name2,empdress:name2Address}如果我理解你的意思是正确的,我会在一个视图中使用事件/方法,或者在嵌套视图中分离一个逻辑。你确切地知道你想要什么。你尝试了什么,以及你在尝试中面临的问题是什么。?你共享了一些代码,它属于哪个对象。?你希望实例是什么?ajaxResponse是什么?你如何能够如果可能的话,用更少的数据创建一个更简单的演示