淺析dojo中的有狀態物件

來源:互聯網
上載者:User

Dojo 1.5 提出了一種“有狀態物件”的概念. 這種有狀態物件會遵循一個原則:通過 get()
set()
去訪問和修改對象的屬性. 所以,擷取一個widget對象的屬性,我們用:

widget.get ( "checked" ) ;

設定一個對象的屬性,我們用:

widget.set ( "checked" , true ) ;get()和set()方法取代了原先的attr()方法,變得更加靈活易用。但是在dojo1.5中,為了向前相容,attr()方法繼續保留,但是其實現已經改變,attr()方法會直接調用widget對象的get()或者set()方法,所以我們強烈建議大家使用get()和set()方法。

 

 

dojo.Stateful 簡介

Dojo同樣提供了一種建立 有狀態物件 的介面,他要用到dojo.Stateful模組,此模組提供了get()和set()介面,同時實現了一個watch()方法,此方法提供了一種監聽對象狀態變化的機制,基於dojo.Stateful,我們建立的對象已經不僅可以被我們自己讀和寫,而且可以被我們監聽了。

1. 首先我們可以基於dojo.Stateful建立一個對象,設定price為9.99:

var obj = new dojo.Stateful ( {<br /> price: 9.99<br />} ) ;
2. 然後,我們可以通過 watch()
方法監聽該對象屬性(price)的變化:

 

obj.watch ( "price" , function ( ) {<br /> console.log ( "price changed to " + this .get ( "price" ) ) ;<br />} ) ;
 

3. 一旦該屬性改變如下:

obj.set ( "price" , 6.99 ) ;
 則上述第2步中的監聽函數會被觸發,打出當前的price值。同樣,我們也可以取消監聽函數:watchHandle = obj.watch ( "price" , callback) ;

// 取消監聽

watchHandle.unwatch ( ) ;
 Dojo.Stateful 發展趨勢

Dojo1.5現在基本只提供了get()和set()方法,我們希望在dojo1.6中讓dojo._Widget繼承自dojo.Stateful,這樣對於dijit中的所有widget我們都能監聽器狀態的變化,就像我們監聽基本對象的屬性變化一樣。

我們同樣也想將這種有狀態的功能應用到Dojo Data中,甚至更大的範圍,這樣不論是dojo的 data store, widget, 又或是任何繼承了Stateful的對象都能被監聽。

 

其實,實現有狀態物件最根本的動機是實現“資料的綁定”功能,比如說:我們需要一個對象的屬性的值始終與另一個對象的某個屬性的值保持一致,又或是當我們修改某個對象屬性的同時,介面上會根據此對象屬性的變化作出相應的變化,實現重新繪製(render)的效果; 這些需求我們都能通過有狀態的對象來實現,我們所要做的就是對這些對象的屬性實現一個“watch()”方法,並在方法中做出相應的實現即可。

 

現在,你已經可以用dojo.Stateful建立一個有狀態的widget對象,並監聽他屬性的一舉一動了。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.