2014-08-27 58 views
0

我遇到過使用淘汰賽js創建新員工的代碼,我希望在嘗試理解時有所幫助?創建淘汰賽動態添加行的實施

mvcModel變量 - var mvcModel = @Html.Raw(Json.Encode(Model))

var viewModel = ko.mapping.fromJS(mvcModel, { 
    'AdditionalEmployees': { 
     create: function(options) { return createAdditionalEmployee(options.data); } 
    } 
    }); 

所以在MVC模式存在List<AdditionalEmployee> AdditionalEmployees和AdditionalEmployee是名字/姓氏/工資一類。因此,上述說法將任何AdditionalEmployees映射到createAdditionalEmployee函數 - 因此,如果在數據庫中保存了3個AdditionalEmployees,則在頁面加載以創建這3行時,此函數將運行3次?

我也想知道什麼是傳遞給函數的選項,然後什麼是options.data?

最後則createAdditionalEmployee功能如下:

var createAdditionalEmployee = function (data) { 
     if (data) { 
      return ko.mapping.fromJS(data); 
     } else { 
      return { 
       Id: ko.observable(), 
       FirstName: ko.observable(), 
       Surname: ko.observable(), 
       Salary: ko.observable() 
      }; 
     } 
    }; 

我再次納悶的是,數據可以通過在列表中的項目 - 返回ko.mapping.fromJS(數據)之間的差異,以及返回ko.observable()爲每個字段這是什麼打我假設如果屏幕上的用戶點擊按鈕添加新的員工行

回答

0

mapping.fromJS()函數自動創建可觀察列表和屬性給定模型時。從您提供的代碼片段中,開發人員決定自定義在他/她的模型中的AdditionalEmployees列表中的每個元素的創建。

函數createAdditionalEmployee()將被調用列表中的每個項目 - 所以你是正確的,如果列表中有3個項目,那麼該函數將被調用3次。在這種情況下,data參數不會爲空,因此將使用mapping.fromJS()函數再次創建新對象。

沒有看到整個例子,我懷疑你說的也是正確的,當用戶(假設)按下屏幕上的「添加」按鈕來創建一個新員工時,也會使用createAdditionalFunction()函數,但在此如果參數爲data,則爲NULL。

你可以找到更多關於映射插件fromJS()函數的細節,並在KnockoutJS documentation page中定製它。