Knockout.Js官網學習(selectedOptions綁定、uniqueName 綁定)

selectedOptions綁定javascript

selectedOptions綁定用於控制multi-select列表已經被選擇的元素,用在使用options綁定的<select>元素上。html

當用戶在multi-select列表選擇或反選一個項的時候,會將view model的數組進行相應的添加或者刪除。一樣,若是view model上的這個數組是observable數組的話,你添加或者刪除任何item(經過push或者splice)的時候,相應的UI界面裏的option項也會被選擇上或者反選。這種方式是2-way綁定。java

注:控制single-select下拉菜單選擇項,你可使用value綁定。數組

示例代碼app

複製代碼
<p>    Choose some countries you'd like to visit:    
    <select data-bind="options: availableCountries, selectedOptions: chosenCountries" size="5" multiple="true">   
    </select>
</p>
<script type="text/javascript" src="~/Scripts/knockout-2.3.0.debug.js"></script>  
<script type="text/javascript">    
    var viewModel = {       
        availableCountries: ko.observableArray(['France', 'Germany', 'Spain']),   
        chosenCountries: ko.observableArray(['Germany'])
    };
    ko.applyBindings(viewModel);
    viewModel.chosenCountries.push('France');
</script>
複製代碼

該參數是數組(或observable數組)。KO設置元素的已選項爲和數組裏match的項,以前的已選擇項將被覆蓋。spa

若是參數是依賴監控屬性observable數組,那元素的已選擇項selected options項將根據參數值的變化(經過push,pop,或其它observable數組方法)而更新,若是不是,那元素的已選擇項selected options將只設置一次而且之後不在更新。debug

無論該參數是否是observable數組,用戶在multi-select列表裏選擇或者反選的時候,KO都會探測到,而且更新數組裏的對象以達到同步的結果。這樣你就能夠獲取options已選項。code

支持讓用戶選擇任意JavaScript對象htm

在上面的例子裏,用戶能夠選擇數組裏的字符串值,可是選擇不限於字符串,若是你願意你能夠聲明包含任意JavaScript對象的數組,查看options綁定如何顯示JavaScript對象到列表裏。對象

這種場景,你能夠用selectedOptions來讀取或設置這些對象自己,而不是頁面上顯示的option表示形式,這樣作在大部分狀況下都很是清晰。view model就能夠探測到你從數組對象裏選擇的項了,而沒必要關注每一個項和頁面上展現的option項是如何map的。

uniqueName綁定

 uniqueName綁定確保所綁定的元素有一個非空的name屬性。若是該元素沒有name屬性,那綁定會給它設置一個unique的字符串值做爲name屬性。你不會常常用到它,只有在某些特殊的場景下才用到。

  1.在使用KO的時候,一些技術可能依賴於某些元素的name屬性,儘快他們沒有什麼意義。例如,jQuery Validation驗證當前只驗證有name屬性的元素。爲配合Knockout UI使用,有些時候須要使用uniqueName綁定避免讓jQuery Validation驗證出錯。

  2.IE 6下,若是radio button沒有name屬性是不容許被checked了。大部分時候都沒問題,由於大部分時候radio button元素都會有name屬性的做爲一組互相的group。不過,若是你沒聲明,KO內部會在這些元素上使用uniqueName那麼以確保他們能夠被checked。

 例如:

<input data-bind="value: someModelProperty, uniqueName: true"/>

 就像上面的例子同樣,傳入true(或者能夠轉成true的值)以啓用uniqueName綁定。

相關文章
相關標籤/搜索