2013-03-14 45 views
0

從客戶端我必須對REST服務進行多個ajax調用,這會給我JSON中的三個不同的域模型。現在在客戶端,我必須在將它們綁定到控件之前將它們轉換爲viewmodel。這意味着將它們轉換爲僅用於呈現數據的完全不同的結構。任何想法或建議都會有所幫助。Knockout - Viewmodel轉換

回答

0

http://jsfiddle.net/sujesharukil/RJGQw/

var vm1 = { 
    Id: 1, 
    Name: 'some name', 
    Address1: 'Some street somewhere', 
    City: 'New York', 
    Country: 'USA', 
    Zip : '11111' 
}; 

var vm2 = { 
    title: 'Mr', 
    designations: ['Chief', 'Boss', 'Lord'], 
    secrets: ['xxxxx','yyyyy','zzzzz'] 
}; 


var vmCombines = function(data1, data2){ 
    return { 
     combinedName: ko.observable(data2.title + ' ' + data1.Name), 
     designation: ko.observable(function(){ 
      if(data2.designations.length == 0) 
       return ''; 

      return data2.designations.join(); 
     }()), 
     Address: ko.observable(function(){ 
      return data1.Address1 + ', ' + data1.City + ',' + data1.Country + ',' +  data1.Zip 
     }()) 
    } 
}; 

ko.applyBindings(new vmCombines(vm1, vm2)); 

和HTML

<input type="text" data-bind="value: combinedName"/><br /> 
<input type="text" data-bind="value: designation"/><br /> 
<input type="text" data-bind="value: Address"/><br /> 
0

var viewModel = JSON.parse(jsonContentFromService);

也許是這樣,那麼:

var mainVM = {}; 

mainVM.SomeStuffFromVm1 = vm1.WhateverYouNeed 
mainVM.SomeStuffFromVM2 = vm2.WhateveryYouNeed; 
+0

我的場景是調用VAR customerViewModel = JSON.parse(jsonContentFromService1); var employeeViewModel = JSON.parse(jsonContentFromService2);然後構造另一個稱爲screen1ViewModel的viewModel,它將從employeeViewModel和customerViewModel中獲取一些選擇數據。那就是我試圖實現的場景 – 2013-03-14 02:33:07

+0

您可以基於其他三個構建一個新對象 – TGH 2013-03-14 02:37:57

0

你應該檢查出單頁Web應用程序約翰爸爸的課程。他描述了一種我肯定會滿足您需求的架構。雖然他只有一個Web API,但如果使用多個API,則在架構上沒有區別。

簡而言之,您需要一個模型模塊來定義客戶端對象(model.employeemodel.customer)的形狀。然後,您的視圖模型模塊包含包含(除其他外)一個或多個這些對象的視圖模型。例如。 vm.employees將包含員工對象的列表(ko.observableArray),而vm.employeesAndCustomers將包含員工及其關聯客戶的ko.observableArray。如果您希望只有部分數據來自model.employee對象的視圖模型和來自model.customer對象的部分數據,那麼您需要定義一個新模型,如​​和model.customerBrief,然後定義一個使用這些項目列表的視圖模型。

您應該使用dataservice模塊從服務中檢索數據,並使用datacontext模塊將接收到的JSON轉換爲客戶端(model。*)對象列表,並在內存列表中保存這些列表。查看模型從datacontext收到他們的observableArrays

datacontext將使用model.mapper模塊將接收到的JSON轉換爲其客戶端表單。

相關問題