내 단일 페이지 응용 프로그램에서 Knockout js를 사용하고 있습니다. 하나의 viewmodel 데이터 값을 다른 viewModel 데이터로 가져와야하므로 복제 생성을 줄일 수 있습니다. 같은 견해는, 내가 이것을 달성 할 수있는 방법은 아래에있는 내 code.I이 모델하나의 viewModel에서 다른 ViewModel Knockout으로 데이터를 옮기는 방법 JS
//Employee View
<div class="Employee-view" data-role="view" id="employee">
<div data-role="content" >
<ul>
<li foreach:EmployeeData>
//Onlcick of this need to navigate to Department view and bind all values on particular Employee ID
<div databind:"click:GetDepartmentDetails">
<span data-bind:"text:EmployeeId"> <span>
<span data-bind:"text:EmployeeName"> <span>
<span data-bind:"text:EmployeeImage"> <span>
<div>
<li>
<ul>
</div>
</div>
EmployeeViewModel = new EmployeeDetailsViewModel();;
$(".Employee-view").each(function() {
ko.applyBindings(EmployeeViewModel, $(this).get(0));
});
function EmployeeViewModel()
{
var self=this;
self.EmployeeData = ko.observableArray([]);
self.GetEmployee=function(UserName,Password){
var UserModel = { UserName: UserName, Password: Password}
$.ajax({
type: "POST",
dataType: "json",
url: serverUrl + 'xxx/xxx/GetEmployee',
data: UserModel,
success: function (data) {
self.EmployeeData($.map(data, function (item) {
return new EmployeeModel(item);
})),
});}
//Click EVENT
self.GetDepartmentDetails=(EmployeeData)
{
// I am getting all the value in this ViewModel,I need to pass this value to DepartmentViewModel and i need to call the function
self.GetEmployeeByDepartment();
}
}
function EmployeeModel(data)
{
var self=this;
self.EmployeeId=ko.observable(data.EmployeeId)
self.EmployeeName=ko.observable(data.EmployeeName)
self.EmployeeImage=ko.observable(data.EmployeeImage)
}
//Department View
<div class="Department-view" data-role="view" id="Department">
<div data-role="content">
<ul>
<li data-bind:"foreach:DepartmentData ">
<div>
<span data-bind:"text:DeptId"> <span>
<span data-bind:"text:DeptName"> <span>
<div>
<li>
<ul>
</div>
</div>
//Department View Model
function DepartmentViewModel()
{
var self=this;
self.DepartmentData = ko.observableArray([]);
self.GetEmployeeByDepartment=function(item){
employeeID=item.EmployeeId
employeename=item.Employeename
var DeptModel = { Employeename: employeeID, Employeename: employeename}
$.ajax({
type: "POST",
dataType: "json",
url: serverUrl + 'xxx/xxx/GetDepratmenDetails',
data: DeptModel ,
success: function (data) {
self.DepartmentData ($.map(data, function (item) {
return new DepartmentModel(item);
})),
});}}
}
function DepartmentModel(data)
{
var self=this;
self.DeptId=ko.observable(data.DeptID)
self.DeptName=ko.observable(data.DeptName)
}
DepartmentViewModel = new DepartmentDetailsViewModel();
$(".Department-view").each(function() {
ko.applyBindings(DepartmentViewModel, $(this).get(0));
});
멋진 기사는 여기에 있습니다. http://www.wrapcode.com/communication-between-multiple-view-models-in-knockoutjs-mvvm-the-right-approach/ –
위의 코드를 사용하여 샘플을 만들려고했지만 너무 많은 구문이 있습니다. 코드가 무엇을하기로되어 있는지 알려주는 오류. 조금 청소할 수 있니? 도움이 될만한 jsfiddle 또는 비슷한 예제를 만들 수 있다면. –
한 파일이 EmployeeViewModel로 구성되고 두 파일이 DepartmentViewModel로 구성되는 두 개의 js 파일이 있습니다. 페이지로드시 EmployeeViewModel 및 DepartmentViewModel에 대한 모든 값을 얻고 있습니다. 이제 바인딩 후 데이터 바인딩이 있습니다 : "click : GetDepartmentDetails"이 클릭 이벤트는 EmployeeViewModel에 있습니다. 이것을 클릭하면 EmployeeData observablearry를 다른 DepartmentViewModel로 가져와 특정 사용자를 얻을 수 있습니다. –