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回调的话会调用他们,最后建立一个新对象,并将新对象添加到数组而后返回该新对象。

相关文章
相关标签/搜索