Knockout.Js官網學習(Mapping高級用法二)

使用ignore忽略不須要map的屬性數組

若是在map的時候,你想忽略一些屬性,你能夠使用ignore累聲明須要忽略的屬性名稱集合:app

    var data = {"name":"aehyok","age":"25" };
    var mapping = { 'ignore': ["age"] };
    var viewModel = ko.mapping.fromJS(data, mapping);

這樣執行後age不會在viewModel中函數

你聲明的忽略數組被編譯到默認的ignore數組裏。你能夠像下面代碼同樣來維護它:this

    var oldOptions = ko.mapping.defaultOptions().ignore;
    ko.mapping.defaultOptions().ignore = ["alwaysIgnoreThis"];

 

使用include聲明須要map的屬性插件

默認狀況下,當map你的view model回到JS對象是時候,只map原始view model裏擁有的屬性(除了例外的_destroy屬性),不過,你能夠使用include參數來定製:code

var mapping = {    'include': ["propertyToInclude", "alsoIncludeThis"]};

var viewModel = ko.mapping.fromJS(data, mapping);

你聲明的include數組被編譯到默認的include數組裏,默認只有_destroy。 你能夠像這樣來維護:對象

var oldOptions = ko.mapping.defaultOptions().include;

ko.mapping.defaultOptions().include = ["alwaysIncludeThis"];

 

使用copy來複制屬性blog

默認狀況下,map的時候是把全部的值都轉換成observable的,若是你只是想copy屬性值而不是替換成observable的,你能夠將屬性名稱添加到copy數組:ip

var mapping = {    'copy': ["propertyToCopy"]};

var viewModel = ko.mapping.fromJS(data, mapping);

你聲明的copy數組被編譯到默認的copy數組裏,默認值是空。你能夠像這樣來維護ci

var oldOptions = ko.mapping.defaultOptions().copy;
ko.mapping.defaultOptions().copy = ["alwaysCopyThis"];

Specifying the update target

在上面的例子,若是你想再一個class內map,你能夠使用第三個參數做爲操做的目標,例如:

ko.mapping.fromJS(data, {}, someObject); 

因此,若是你想map一個JavaScript對象到this上,你能夠這樣聲明:

ko.mapping.fromJS(data, {}, this);

從數據源map

你能夠經過屢次使用ko.mapping.fromJS 來將多個JS對象的數據源map到一塊兒,例如:

var viewModel = ko.mapping.fromJS(alice, aliceMappingOptions);

ko.mapping.fromJS(bob, bobMappingOptions, viewModel);

Map之後的observable數組

map插件map之後生產的observable數組,帶有幾個額外的函數來處理帶有keys的mapping:

mappedRemove
mappedRemoveAll
mappedDestroy
mappedDestroyAll
mappedIndexOf

它們是和ko.observableArray裏的函數等價的,不一樣是他們經過key來處理對象。例如:

    var obj = [{ id: 1 }, { id: 2 }];
    var result = ko.mapping.fromJS(obj, { key: function (item) { return ko.utils.unwrapObservable(item.id); } });
    result.mappedRemove({ id: 2 });

map過的observable數組,除了上面的函數還支持一個mappedCreate函數:

 var newItem = result.mappedCreate({ id: 3 });

首先會檢查key(id=3)在數組裏是否存在(若是存在則拋出異常),而後,若是有create和 update回調的話會調用他們,最後建立一個新對象,並將新對象添加到數組而後返回該新對象。

相關文章
相關標籤/搜索