MVVM架(jia)構~knockoutjs系(xi)列(lie)之Mapping插(cha)件為對象(xiang)添加ko屬性
對于一個JS對象(xiang)來(lai)說(shuo),如果希望(wang)將所有屬性(xing)(xing)進行監視,在(zai)之前我們需要一個個對屬性(xing)(xing)添加ko.observable方法,而(er)有了Mapping插(cha)件(jian)后,它可以幫助我們這件(jian)事.
在Mapping出現之前
var data={ serverTime:ko.observable( '2010-01-07'), numUsers: ko.observable(3), realUsers: ko.observable(3), }
我們(men)需要對(dui)data對(dui)象里(li)所有屬性添加ko.observable方法,才(cai)可以對(dui)它進行監(jian)視.
Mapping出現之后
假設有這樣一(yi)個場景,我們(men)在對(dui)象里的realUsers需(xu)要跟隨numUsers進(jin)行(xing)變化,這時,我們(men)使用Mapping進(jin)行(xing)對(dui)象的KO處理,然(ran)后再使用ko.computed方(fang)法進(jin)行(xing)綁定,看一(yi)下代碼
var data = { serverTime: '2010-01-07', numUsers: 3, realUsers: 3, } var M = ko.mapping.fromJS(data);//data對象里(li)所有屬性添加ko屬性 M.realUsers = ko.computed(function () { return M.numUsers() ? M.numUsers() * 2 : 0; }); ko.applyBindings(M, document.getElementById("model2"));
對(dui)應(ying)的HTML代(dai)碼如下
<div id="model2">
<input type="text" data-bind="value:serverTime" />
<input type="text" data-bind="value:numUsers,valueUpdate: 'afterkeydown'" />
<input type="text" data-bind="value:realUsers" />
</div>
通過這個例子(zi),讓我(wo)們(men)知道如(ru)何快速的為JS對象(xiang)添加(jia)KO屬性,呵呵.