KnockoutJs學習筆記(十二)

value binding通常適用於input、select、textarea等form elements中,可以將view model中的屬性和相關聯的DOM element的值(value)鏈接起來。通常狀況下,當用戶修改form域中的值時,KO會更新相關聯的view model中的屬性的值;一樣的,當view model中的屬性值發生變化時,KO也會更新頁面中相關聯的form域內的值。javascript

注意:當咱們處理checkboxs或是radio buttons時,咱們通常使用checked binding來讀寫元素的checked狀態,而不是使用value binding。html

下面是一個簡單的例子:java

html部分:node

1 <p>
2     Login name:
3     <input type="text" data-bind="value: loginName" />
4 </p>
5 
6 <p>
7     Password:
8     <input type="password" data-bind="value: password" />
9 </p>

 js部分:瀏覽器

1 function MyViewModel() {
2     var self = this;
3 
4     self.loginName = ko.observable("");
5     self.password = ko.observable("1qaz");
6 }
7 
8 ko.applyBindings(new MyViewModel());

 KO會將相應的元素的value設置爲參數的值,且任意以前的value都會被覆蓋掉。若是參數是一個observable,則binding會在參數值改變的時候更新元素中的value,不然,UI只會設置一次value的內容,之後再也不更新。app

當用戶修改form域內使用了value binding的元素的value時,KO會相應地更新view model內被綁定的屬性,默認狀況下這實際上是藉由change event觸發的,也就是在用戶修改了這個值並轉而關注另外一個DOM節點的時候觸發。可是咱們也可以藉由valueUpdate這一參數來經過其餘的事件觸發更新。經常使用的參數包括"input", "keyup", keypress", "afterkeydown"等。函數

注意一:若是咱們但願綁定<input type="text">或是<textarea>以獲取view model的即時更新,textInput binding相比於value binding會提供更好的支持。this

注意二:KO會爲select元素提供特殊的支持,value binding協同options binding可以讓咱們讀寫任意的javascript object,而不單單是字符串的值。更爲詳盡的內容能夠參閱the options bindingthe selectedOptions binding這裏還涉及到另外一個參數valueAllowUnset的問題,待研究了options binding等之後再進行補充spa

注意三:若是咱們使用value binding的參數是一個observable,那麼KO會設定一個雙向的綁定,即form元素會與view model property互相影響;code

若是參數是一個通常的view model property(不是observable),則KO會設定一個單項的綁定,即每當用戶修改form元素的value時,KO便會修改相應的view model property,反之則不會對form元素形成影響;

若是參數並非一個簡單的property,而是一個函數或是比較判斷語句,則KO只會利用這一語句返回的值來初始化form元素的value,以後並不會在二者之間創建聯繫。

對於以上的規則我有一個關於computed Observable的疑問,即computed Observable會產生怎樣的聯繫呢?這個暫時留做之後研究

注意四這部分的內容與checked binding有關,待研究了checked binding之後再進行補充


textInput binding主要做用於<input type="text">和<textarea>,它的主要做用在於提供一種即時的更新。拿value binding和textInput binding作一個對比,value binding中只有當用戶專一於另外一個node的時候,他以前更改的value纔會做用於對應的view model property上,而textInput binding會在用戶擊鍵、拖拽、粘貼(任何修改value的操做)以後當即產生效果。

從另外一個角度來講,textInput也能良好地兼容不一樣瀏覽器關於一些特殊事件響應的怪癖,因此通常來講對於<input type="text">和<textarea>等,使用textInput binding會更好一些。

相關文章
相關標籤/搜索