applyBinding Observables
一般的數據綁定有三種:One-Time,One-Way,Two-way。
One-Time綁定模式的意思即為從viewModel綁定至UI這一層只進行一次綁定,程序不會繼續追蹤數據的在兩者中任何一方的變化,這種綁定方式很使用于報表數據,數據僅僅會加載一次。
One-Way綁定模式即為單向綁定,即object-UI的綁定,只有當viewModel中數據發生了變化,UI中的數據也將會隨之發生變化,反之不然。
Two-Way綁定模式為雙向綁定,無論數據在Object或者是UI中發生變化,應用程序將會更新另一方,這是最為靈活的綁定方式,同時代價也是最大的。數據綁定只是作為元素的自定義屬性寫上標簽內,并不能決定它是何種綁定。
如果值是通過ko.observable定義的說明是雙向綁定,否則為One-Time綁定,在knockout不存在單向綁定。
applyBindings
隱藏代碼// Knockout調用applyBindings激活myViewModel(即把myViewModel和View中的聲明式綁定data-bind接洽關系起來) ko.applyBindings(myViewModel); // 限制只在指定對象someElementId和后代節點中進行激活操縱。 ko.applyBindings(myViewModel, document.getElementById(""someElementId"")); personName: ko.observable(""Bob""), // 靜態綁定 The name is <span data-bind="text: personName"></span>Observables
并不是所有的瀏覽器都支撐JavaScript的getters和setters辦法(IE),是以從兼容性推敲,ko.observable是function。
讀取observable屬性:myViewModel.personName()
設置observable屬性:myViewModel.personName(""Mary"")
同時設置多個observable屬性:myViewModel.personName(""Mary"").personAge(50) 鏈式語法
隱藏代碼// 動態綁定(主動訂閱,作廢訂閱) var subscription = myViewModel.personName.subscribe(function(newValue) { /* do stuff */ }); // ...then later... subscription.dispose(); // I no longer want notifications// Computed Observablesthis.fullName = ko.computed(function() {return this.firstName() + " " + this.lastName();}, this);var myObservableArray = ko.observableArray(); // Initially an empty array myObservableArray.push(""Some value""); // Adds the value and notifies observers// 初始化綁定命組 // This observable array initially contains three objects var anotherObservableArray = ko.observableArray([{ name: "Bungle", type: "Bear" },{ name: "George", type: "Hippo" },{ name: "Zippy", type: "Unknown" } ]);// 自定義排序 myObservableArray.sort(function(left, right) { return left.lastName == right.lastName ? 0 : (left.lastName < right.lastName ? -1 : 1) })// 可寫的依附屬性 --- 數字主動格局化顯示,保存值時移除無關逗號 function MyViewModel() {this.price = ko.observable(25.99);this.formattedPrice = ko.computed({read: function () {return ""¥"" + this.price().toFixed(2);},write: function (value) {// Strip out unwanted characters, parse as float, then write the raw data back to the underlying "price" observablevalue = parseFloat(value.replace(/[^.d]/g, ""));this.price(isNaN(value) ? 0 : value); // Write to underlying storage},owner: this}); }ko.applyBindings(new MyViewModel());Writeable computed observables可寫的依附屬性(FirstName 和 FullName彼此換算,數字主動格局化顯示)
ko.dependentObservable(Knockout 2.0中新增長的辦法,和ko.computed等價,然則加倍便利懂得應用)
Observable Arrays
observableArray :跟蹤的是數組中的對象,而不是對象的狀況。即observableArray 僅跟蹤它擁有的對象,
并且在對象被添加或者刪除的時辰,通知listeners
。要監控對象的屬性變更,須要編寫自力的代碼。 因為observableArray()辦法放回的是一個數組,是以從技巧上來說,任何Javascript關于數組操縱的原生辦法都能直接應用。
然則基于下述來由,凡是推薦應用KO中的等價辦法:
1,KO中的辦法支撐所有主流瀏覽器(比如,Javascript原生辦法indexOf在<=IE8時不正常,而KO的indexOf 能正常工作)
2,dependency tracking
3,語法加倍簡潔:調用KO中的辦法應用myObservableArray.push(...),調用原生Javascript中的辦法應用myObservableArray().push(...)
具體每個辦法參考下面鏈接中的文檔
observableArray 排序:默認對字符串用字母排序,對數字用數值排序。可以自定義排序辦法:參考代碼塊中的代碼
總結
以上是生活随笔為你收集整理的applyBinding Observables的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 李国庆吐槽东方甄选:下单人数太少 属于不
- 下一篇: 新变异株在美国35天占比飙升21倍:传播