Html5 經驗

knockout的模式
MVVM
四大重要概念
聲明式綁定UI界面自動刷新依賴跟蹤模版
一些特色
純javascript類庫
可添加到web程序最上部
簡潔 才25kb
兼容任何主流瀏覽器
採用行爲驅動開發
快捷鍵的設置方法
settings->keymap
jQuery 和 knockout的 長處
1. jQuery 擅長 元素操做 和 事件
2. knockout 擅長  數據模型與用戶UI界面進行關聯
data-bind
文本 text
按鈕是否可點擊 enable ; 但實際操做中發現得用這個  touch-events: none; pointer-events: none;
激活knockout
ko.applyBindings( viewModel , view ) ;這個view能夠省略,
 
當你在一個頁面中聲明瞭多個View Model來綁定不一樣的界面區域時,這樣限制是頗有好處的
監控機制
var myViewModel = {
personName: ko.observable('Bob'),
personAge: ko.observable(123)
} ;
計算屬性
fullName:ko.computed( function(){
   return this.personName + " " + this.personLastName ) ,}
this  ) ;
監控屬性數組(observableArray)。
myObservableArray.sort(  function(left, right) {
    return left.lastName == right.lastName ? 0 : (left.lastName < right.lastName ? -1 : 1)
})
 
var myObservableArray = ko.observableArray();
 
2 myObservableArray.push('Some value');
 
有這些方法可用:pop unshift shift reverse splice remove removeAll
 
observableArray :跟蹤的是數組中的對象,而不是對象的情況。即observableArray 僅跟蹤它擁有的對象,而且在對象被添加或者刪除的時辰,通知listeners 。要監控對象的屬性變動,需要編寫自力的代碼
visible
<div data-bind="visible: shouldShowMessage">
<div data-bind="if: displayMessage">
text html 的綁定
html
其它屬性綁定 用 attr
好比  <a data-bind="attr: { href: url, title: details }">
在沒有綁定屬性的狀況下使用foreach
  <!-- ko foreach: myItems -->         <li>Item <span data-bind="text: $data"></span></li>     <!-- /ko -->
with
要學會用 其實就是聲明母對象
as
聲明子對象的名字 舉例:
<ul data-bind="foreach: { data: categories, as: 'category' }">    
      <li>        
             <ul data-bind="foreach: { data: items, as: 'item' }">            
                   <li>                
                         <span data-bind="text: category.name"></span>:              
                         <span data-bind="text: item"></span>            
                   </li>        
              </ul>    
      </li>
</ul>
class實際上是分開控制的
<div class="tab-1 active" data-bind="click:navigateTo('bean'), css: {'active':$root.beanIsSelected"}></div>
 
若是渲染綁定view的子級要不要加$root
其實不用
若是在html裏給綁定的方法加參數了,有一種寫法默認會執行一次,有一種寫法不會
click:navigateTo('star') 這種會默認執行一次
 
click: function() { navigateTo('star') }  這種不會默認就執行一次
判斷class是否存在支持 !嗎
 
不支持css: {'active': !beanIsSelected}" 前面的這種寫法是無效的
要用這種寫法:css: {'active': !beanIsSelected() }
如何綁定圖片地址
<img data-bind="attr:{'src':oneitem.imgUrl}" />
 動態綁定高度的方法
data-bind="style:{'height':$root.tabInnerHeight }"
 
tabInnerHeight: ko.computed( function(){
 
    return (window.innerHeight * 0.6) + "px" ;}, this ),
綁定方法的寫法:
navigateTo: this.navigateTo.bind( this ),
 
$root
基本上用不上 $root
event binding
<div data-bind="event: { mouseover: enableDetails, mouseout: disableDetails }">
其它綁定
form 的 submitinput 的 value
input 的 value 和 enable
    <input type='text' data-bind="value: cellphoneNumber, enable: hasCellphone" />
hasfocus
<input data-bind="hasfocus: isSelected" />
checked
<p>Send me spam: <input type="checkbox" data-bind="checked: wantsSpam"/></p>
options
<p>Destination country: <select data-bind="options: availableCountries"></select></p>
selectedOptions
<select data-bind="options: availableCountries, selectedOptions: chosenCountries" size="5" multiple="true"></select>
上下文綁定
#parent $parents $root $data $index $parentContext $context $element
template綁定經過模板將數據render到頁面
相關文章
相關標籤/搜索