1. 程式人生 > >kendo-ui的MVVM模式 (贊)

kendo-ui的MVVM模式 (贊)

摘要:

  MVVM(Model View ViewModel)是一種幫助開發者將資料從模型分離的設計模式。MVVM的ViewModel負責將資料物件從模型中分離出來,通過這種方式資料就很容易控制資料如何顯示在檢視上。

建立View-Model物件:

  首先我們需要建立一個View-Model物件,他是控制你的資料顯示在檢視上。

建立物件

複製程式碼
var viewModel = kendo.observable({
    name: "John Doe",
    displayGreeting: function() {
        var name = this
.get("name"); alert("Hello, " + name + "!!!"); } });
複製程式碼

建立檢視

<div id="view">
    <input data-bind="value: name" />
    <button data-bind="click: displayGreeting">Display Greeting</button>
</div>

然後將物件繫結到檢視上

kendo.bind($("#view"), viewModel);

如何工作呢?

  input元素的value值是通過data-bind屬性繫結到viewModel的name欄位,這個繫結是雙向的,當改變viewModel的name欄位值,檢視上input的value值也會被改變。當改變檢視上input元素的value值,viewModel的name欄位也會被改變。

繫結:

  ​元素通過data-bind屬性繫結到viewModel,當你想通過一個物件繫結到檢視上,你可以像下面這樣定義檢視模型

複製程式碼
<div data-bind="text: person.name">
</div>
<script>
var viewModel 
= kendo.observable({ person: { name: "John Doe" } }); kendo.bind($("div"), viewModel); </script>
複製程式碼

data-bind還支援的屬性有source, html, attr, visible, enabled等,支援多個屬性,以逗號分隔。

注意:

  繫結不是javascript,像下面這樣的繫結就是不對的

<div data-bind="text: person.name.toLowerCase()"></div>

ObservableObject:

  kendo.data.ObservableObject是MVVM模式中非常重要的一部分,它支援跟蹤變化和通知使用者發生變化,所有的檢視模型物件都繼承它。

建立ObservableObject

複製程式碼
var viewModel1 = new kendo.data.ObservableObject( {
  field1: "value1",
  field2: "value2"
});
 
var viewModel2 = kendo.observable( {
  field1: "value1",
  field2: "value2"
});
複製程式碼

上面兩種方式都可以建立ObservableObject

注意:檢視模型必須在定義ObservableObject之後使用,否則無效。

設定與獲取屬性值:

   我們可以通過viewModel物件來獲取屬性值,如下:

複製程式碼
var viewModel = kendo.observable({
    name: "John Doe"
});
 
viewModel.set("name", "Jane Doe"); //set the "name" field to "Jane Doe"
 
var name = viewModel.get("name");
alert(name); // shows "Jane Doe"
複製程式碼

關鍵字this:

  我們可以通過this來獲取檢視模型的其他屬性值,如下:

複製程式碼
<span data-bind="text: fullName"></span>
<script>
var viewModel = kendo.observable({
    firstName: "John",
    lastName: "Doe",
    fullName: function() {
        return this.get("firstName") + " " + this.get("lastName");
    }
});
 
kendo.bind($("span"), viewModel);
</script>
複製程式碼

data-bind屬性:

attr:

  attr可以用來繫結DOM元素的屬性,例如:href、title等,對於多個屬性我們可以用物件來繫結,如下:

複製程式碼
<img id="logo" data-bind="attr: { src: imageSource, alt: imageAlt }" />
<script>
var viewModel = kendo.observable({
    imageSource: "http://www.telerik.com/image/kendo-logo.png",
    imageAlt: "Kendo Logo"
});
 
kendo.bind($("#logo"), viewModel);
</script>
複製程式碼

顯示到檢視上就會變成如下:

<img id="logo" src="http://www.telerik.com/image/kendo-logo.png" alt="Kendo Logo"" />

checked:

  checked屬性使用來選擇複選框或者單選框,屬性值為true或false,如下:

複製程式碼
<input type="checkbox" data-bind="checked: isChecked" />
<script>
var viewModel = kendo.observable({
    isChecked: false
});
 
kendo.bind($("input"), viewModel);
</script>
複製程式碼

對於多個複選框,根據value值來決定選中哪一個複選框,屬性值是一個數組,如下:

複製程式碼
<input type="checkbox" value="Red"   data-bind="checked: colors" />
<input type="checkbox" value="Green" data-bind="checked: colors" />
<input type="checkbox" value="Blue"  data-bind="checked: colors" />
<script>
var viewModel = kendo.observable({
    colors: ["Red"]
});
 
kendo.bind($("input"), viewModel);
</script>
複製程式碼

單選框,如下:

複製程式碼
<input type="radio" value="Red"   name="color" data-bind="checked: selectedColor" />
<input type="radio" value="Green" name="color" data-bind="checked: selectedColor" />
<input type="radio" value="Blue"  name="color" data-bind="checked: selectedColor" />
<script>
var viewModel = kendo.observable({
    selectedColor: "Green"
});
 
kendo.bind($("input"), viewModel);
</script>
複製程式碼

注意:單選框應該有相同的name值,checked只適合可以勾選的元素。

 click:

  click屬性將繫結一個方法到檢視模型上,當點選這個DOM元素該方法將會被呼叫。

複製程式碼
<div id="view">
<span data-bind="click: showDescription">Show description</span>
<span data-bind="visible: isDescriptionShown, text: description"></span>
 
<script>
var viewModel = kendo.observable({
    description: "Description",
    isDescriptionShown: false,
    showDescription: function(e) {
        // show the span by setting isDescriptionShown to true
        this.set("isDescriptionShown", true);
    }
});
 
kendo.bind($("#view"), viewModel);
</script>
 </div>
複製程式碼

我們也可以通過events屬性來繫結click事件,如下:

<span data-bind="click: clickHandler"></span>
 
<span data-bind="events: { click: clickHandler }"></span>

阻止事件冒泡

  我們可以使用stopPropagation來阻止click事件冒泡,如下:

複製程式碼
<span data-bind="click: click">Click</span>
<script>
var viewModel = kendo.observable({
    click: function(e) {
        e.stopPropagation();
    }
});
 
kendo.bind($("span"), viewModel);
</script>
複製程式碼

阻止預設事件

  使用preventDefault方法來阻止瀏覽器預設行為。

複製程式碼
<a href="http://example.com" data-bind="click: click">Click</span>
<script>
var viewModel = kendo.observable({
    click: function(e) {
        // stop the browser from navigating to http://example.com
        e.preventDefault();
    }
});
 
kendo.bind($("a"), viewModel);
</script>
複製程式碼

custom:

   kendo MVVM提供自定義繫結屬性,這有利於我們自己做一些擴充套件。我們可以通過kendo.data.Binder來註冊一個屬性。

單項繫結

  這種自定義屬性當檢視模型的屬性值改變時,DOM元素將被更新,但是當DOM元素改變時並不會更新檢視模型屬性值。如下:

相關推薦

kendo-ui的MVVM模式

摘要:   MVVM(Model View ViewModel)是一種幫助開發者將資料從模型分離的設計模式。MVVM的ViewModel負責將資料物件從模型中分離出來,通過這種方式資料就很容易控制資料如何顯示在檢視上。 建立View-Model物件:   首先我們需要建立一個View

GOF23—單例模式2

應該 一個 img bsp 漏洞 資源 nbsp 創建 就會 本文介紹單例模式(不包含枚舉單例模式)漏洞問題以及如何防止漏洞   1.反射可以破解單例模式,例子如下:       此時,我們運行Client類,發現s1和s2是一個對象,但s3和s4是不同的對象。 那麽如何防

『ORACLE』 設置Edit模式11g

配置 修改 sqlplus spa size span -s ont def SQL>define_editor=‘vi‘ 執行一條SQL語句再修改編輯 SQL>ed 可以將define _editor=‘vi‘這句話寫在sqlplus 的啟動配置腳本中『ORA

設計模式之適配器模式Adapter

功能 系統 第三方 抽象 可能 對象 期待 技術分享 適配器 我想要是說適配器模式,提一下“電壓”、“耳機”、“充電器”和 "USB” 的例子應該是比較恰當的了。就說說自己的親身經歷,我原來的手機是NOKIA5730。後來也不知道有沒有國行,但是不推薦大家買這款手機,不適

設計模式之建造者模式Builder

人的 做出 字體 存在 分享 定義 固定 也不會 抽象方法 一個人活到70歲以上,都會經歷這樣的幾個階段:嬰兒,少年,青年,中年,老年。並且每個人在各個階段肯定是不一樣的呀,我覺得可以說世界上不存在兩個人在人生的這5個階段的生活完全一樣,但是活到70歲以上的人,都經歷了這幾

[轉]設計模式--單例模式懶漢式和餓漢式

打印 是否 調用構造 餓漢 一段 tools 會有 輸出結果 java 單例模式是設計模式中比較簡單的一種。適合於一個類只有一個實例的情況,比如窗口管理器,打印緩沖池和文件系統, 它們都是原型的例子。典型的情況是,那些對象的類型被遍及一個軟件系統的不同對象訪問,因此需要一個

《跨界雜談》商業模式:金融

公眾 匯率 白狼 wcf qrcode 行業 mom 運動 bsp 2015-03-14 雷震子 雷震子 金融具有非常強的專業性,非常easy把筆者落到班門弄斧的境界。但也不想謹言慎行,大家將就看吧,別太把豆包當幹糧就中了。 金融歷史悠久,伴隨商業而生,

設計模式: 工廠模式

dem blank hibernate 執行 oid code 做出 void actor 工廠模式 工廠模式(Factory Pattern)是 Java 中最常用的設計模式之一。這種類型的設計模式屬於創建型模式,它提供了一種創建對象的最佳方式。 在工廠模式中,我們在創建

單例模式Singleton

ech 單例模式 bsp 在線 創建 private 解決 餓漢式 dir 1.解決的問題:使得一個類只能夠創建一個對象。2.如何實現: ①私有化構造器,使得在類的外部不能調用該構造器 ②在類的內部創建一個實例 ③私有化該對象,通過公共的方法來調用(返回該

工廠模式

log ofa clas pri com urn 兩層 實現 需求 工廠方法模式:簡單工廠模式的進一步抽象和推廣。工廠方法模式把簡單工廠中的具體的工廠類劃分為兩層:抽象工廠層+具體工廠層,類圖如下: 涉及到的角色: 抽象產品角色:所有產品的共同父類或共有接口,用以實現多態

JAVA設計模式之單例模式

單例對象 日誌 locking anti 常見 基本上 title 加載 懶漢式 本文繼續介紹23種設計模式系列之單例模式。 概念:  java中單例模式是一種常見的設計模式,單例模式的寫法有好幾種,這裏主要介紹三種:懶漢式單例、餓漢式單例、登記式單例。  單例模式有以下特

PHP面向對象單例模式懶漢式

檢查 私有 構造函數 知識 單例 懶漢 變量 eof php面向對象 知識點: 一、三私一公: ①、私有靜態屬性,又來儲存生成的唯一對象 ②、私有構造函數 ③、私有克隆函數,防止克隆——clone ④、公共靜態方法,用來訪問靜態屬性儲存的對象,如果沒有對象,則生成此單例 二

代理模式Proxy

p s log 場景 private span 方法 陌生 機制 特殊 代理模式(Proxy) 代理模式:簡單明了。簡稱代理商,對代理這個詞想必大家都不陌生,現在微信上,幾乎全是各種代理商,哈哈哈。。。不錯。我們的代理模式,也是如此。用java語言來說。就是,替原對象進行一

跟我學設計模式視頻教程——管擦者模式,責任鏈模式

tar eight color font content 設計模式 name -m ack 課程視頻 觀察者模式(下) 責任鏈模式(上) 課程筆記 課程筆記 課程代碼 課程代碼 新課程火熱報名中 課程介紹

java面向對象與設計模式

工廠方法模式 java 選擇 缺點 一個 聯系 面向 抽象工廠 pan 第五式 抽象工廠模式 定義:提供一個創建一系列相關或相互依賴對象的接口,而無需指定他們具體的類。(創建的對象之間有約束) 抽象工廠模式的本質:選擇產品簇的實現 優點:分離接口和產品簇,使得切換產品簇變得

設計模式觀察者模式

針對 ray 需求 als bool 模式 null rri 主動 觀察者模式 定義了對象之間的一對多的依賴,這樣一來,當一個對象狀態改變時,他的 多有依賴都會受到通知並自動更新。 本例為一個溫度基站,和三個終端。溫度基站為廣播類WeatherData,三個終端監聽者類分別

狀態模式State

color htm 存在 定義 ole 子類 轉換 模式 sum 狀態模式:當一個對象的內在狀態改變時,允許改變其行為,這個對象看起來像是改變了其類。 狀態模式主要解決的是當控制一個對象狀態轉換的條件表達式過於復雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類當中,

備忘錄模式Memento

ring 信息 out 根據 string 歷史 role 還原 html 備忘錄模式:在不破壞封裝性的前提下,捕捉一個對象的內部狀態,並在改對象之外保存這個狀態。這樣以後就可將該對象恢復到原先保存的狀態。 備忘錄模式比較適合功能比較復雜的,但需要維護或記錄屬性歷史的類。或

適配器模式Adapter

ride 適配器模式 com 不能 static public ada pri get 適配器模式:將一個類的接口轉換成客戶希望的另外一個接口。Adapter模式使得原來由於接口不兼容而不能一起工作的那些類一起工作。 在軟件開發中,系統的數據和行為都正確。但是接口不符時,我

組合模式Composite

rem for remove 安全 tco fin trac roo 問題 組合模式:將對象組合成樹形結構以表示‘部分-整體’的層次結構。組合模式使得用戶對單個對象和組合對象的使用具有一致性。 public abstract class Company {