0

Iam使用敲除js和asp.net mvc(vs2013)與實體框架 首先,我有一個索引頁(mas​​terViewModel),我聲明所有我的子視圖模型如何解決價值不綁定問題使用observable數組和forEach綁定

此外,有一個視圖模型和函數,使服務器端ajax調用,從服務器端收集信息,插入到可觀察數組中,並綁定該數組的元素以查看從服務器端顯示的數據庫,三個對象,但綁定工作,而不是綁定三個不同的助理驅動程序名稱的視圖,它通過對象0和1循環 後三次綁定相同的值(對象2)。此刻我的電流輸出爲

史密斯 史密斯 史密斯

這是我在淘汰賽調用服務器端

function populateDrivers() { 
    if (!masterViewModel.isAuthenticated()) return; 

    $.when(getSecureData("/api/Drivers/?driverId=")) 
    .done(function (resp) { 
     masterViewModel.vehicleDetail.assistantDriverList(resp.assistantDriverList) 

     ko.utils.arrayMap(resp.assistantDriverList, function (obj) { 
     //ko.utils.arrayForEach(resp.assitantDriverList, function (obj) 
     //arrayMap 
     masterViewModel.FleetInfoVM.vehicleDetail.assistantDriverName(obj.assistantDriverName); 
     masterViewModel.FleetInfoVM.vehicleDetail.carRegNumber(obj.CarRegNumber); 
     masterViewModel.FleetInfoVM.vehicleDetail.make(obj.Make); 
     masterViewModel.FleetInfoVM.vehicleDetail.Model(obj.Model);  
     }); 

    }); 

} 

,這我在html結合

<table style="table-layout: fixed" class="table table-striped table-bordered"> 
<thead> 
<tr> 
    <th>Assistant Name</th> 

</tr> 
</thead> 

<tr> 

    <td data-bind="text: $root.FleetInfoVM.vehicleDetail.assistantDriverName"> </td> 

    <td class="td-actions"> 
     <a class="btn btn-small" data-bind="click: $root.vehicleDetail.edit" title="Edit"> 
      <i class="icon-edit"></i> 
     </a> 
     <a class="btn btn-small" "> 

     </a> 
     <a class="btn btn-small"> 

     </a> 
    </td> 
</tr> 
</tbody> 
</table> 

,這些都是我的視圖模型

function MasterViewModel() { 
     var pvm = this; 
     mvm.loginVM = new LoginViewModel(); 
     mvm.VehicleVM = new vehicleViewModel(); 
     mvm.topManagerVM = new TopManagerViewModel(); 
     mvm.FleetInfoVM = new FleetInfoViewModel 
    } 

    MasterViewModel = new MasterViewModel(); 
    ko.applyBindings(MasterViewModel, document.getElementById("htmlTop")); 


FleetInfoViewModel 
========================================================================= 

function FleetInfoViewModel 
{ 
    var fiv = this; 

    fiv.branch id = ko.observable(0); 
    fiv.branch name = ko.observable(0); 
    fiv.location = ko.observable(""); 
    fiv.driverDetail = new DriverViewModel(); 
    fiv.vehicleDetail = new vehicleViewModel(); 

} 
function DriverViewModel() { 
    var drv = this; 
    drv.driverId = ko.observable(0); 
    drv.driverName = ko.observable(""); 
} 
function vehicleViewModel{ 
    vvm.assitantDriverList = ko.observable([]); 
    vvm.assistantDriverName = ko.observable(""); 
    vvm.regNumber = ko.observable(0); 
    vvm.make = ko.observable(""); 
    vvm.model = ko.observable(""); 
    } 
+0

這太長太寬了。首先隔離問題(服務器是否正確地執行它的部分?客戶端是否得到了應該的東西?等等),然後再次詢問 – Amit

+0

是的,這是因爲其他名稱出現然後消失而使姓氏顯示三次e,g史密斯史密斯史密斯代替瓊斯,詹姆森史密斯 – anchor

+0

你的'foreach'綁定在html中? – Dandy

回答

0

貌似這個問題是在你的arrayMap。在迭代其中的結果時,您仍然只能綁定到同一個對象(因此爲什麼在每次迭代時都要覆蓋結果)。您應該在那裏創建一個vehicleViewModel的實例,並將其推送到observableArray。類似於

var vehicleList = ko.observableArray(); 

// arrayMap returns an array of whatever you return therein. In this case 
// an instance of your vehicleDetail viewModel. 
vehicleList = ko.utils.arrayMap(resp.assistantDriverList, function (obj) { 
    var vehicleDetail = new vehicleViewModel(); 
    vehicleDetail.assistantDriverName(obj.assistantDriverName); 
    vehicleDetail.carRegNumber(obj.CarRegNumber); 
    vehicleDetail.make(obj.Make); 
    vehicleDetail.Model(obj.Model);  
    return vehicleDetail; 
}); 
+0

謝謝@它似乎問題實際上是與綁定值 – anchor