MozTW 討論區 https://forum.moztw.org/ |
|
純粹地分開JavaScript和HTML? https://forum.moztw.org/viewtopic.php?f=13&t=20211 |
第 1 頁 (共 1 頁) |
發表人: | legnaleurc [ 2007-08-31, 18:54 ] |
文章主題 : | 純粹地分開JavaScript和HTML? |
原本我是想利用每個HTML element的id和class屬性去註冊一個監聽函式,來取代onload等屬性 但是這麼做會變得很難傳引數 比方說可能有五個變量要傳遞 但是這些並不能合理地放在DOM的屬性裡 有沒有什麼比較好的方法解決呢? edit: 也許利用JSON去解出物件會比較好? |
發表人: | kourge [ 2007-08-31, 22:15 ] |
文章主題 : | |
我知道你指的是什麼,可是沒有範例實在是很難以舉例... |
發表人: | legnaleurc [ 2007-08-31, 22:33 ] |
文章主題 : | |
假設 代碼: <button type="button" value="[myclipURI]" class="Media">click to invoke</button>
<script type="application/javascript"> [register onclick event at ".Media"] [take the value of "value" and insert OBJECT node] </script> 一般來說只要傳入URI就好 可是如果要加入維度的設定或是播放器的選項 也不能隨便加個屬性放進<button>裡(個人覺得這樣很怪) 我有看過jQuery有類似的功能 但是好像不能做太詳細的設定 我的想法是 value="[JSON]" 然後用eval解成Object 可是不知道有沒有比較好的做法 |
發表人: | kourge [ 2007-09-01, 00:19 ] |
文章主題 : | |
jQuery 官方有個 plugin,叫做 Metadata,不過 Metadata 有其缺點,所以有人開發出 Metaobjects。 |
發表人: | legnaleurc [ 2007-09-01, 01:47 ] |
文章主題 : | |
其實我舉object只是其中一種應用例子 而且我已經寫了一些依賴Prototype的自用函式庫,再加上jQuery我不知道會不會conflict 主要是在有多個引數要傳遞時 用什麼方法比較好? 因為我後來用JSON時 發現如果要放在attribute裡 那麼String的"要逸出為" 看起來有夠醜... |
發表人: | kourge [ 2007-09-03, 22:33 ] |
文章主題 : | |
如果是 Prototype,我通常都會把各種設定藏在 markup 裡面,到時候事件的監聽器被發動時,監聽器函式再讀取事件來源元素的 markup 裡面之屬性,這樣子就完全把傳遞引數給省掉了。 |
發表人: | legnaleurc [ 2007-09-04, 03:00 ] |
文章主題 : | |
所以說作法是 <button class="Example" attr1="blahblah" attr2="blahblah" attr3="blahblah">omote no monji</button> 然後 $$( '.Example' ).each( function( X ) { X.observe( 'click', function( E ) { var attributes = { attr1: X.readAttribute( 'attr1' ), attr2: X.readAttribute( 'attr2' ), attr3: X.readAttribute( 'attr3' ) }; } ); } ); 這樣嗎?(當然避開該element原本的屬性) 因為這種做法好像在自行擴展DOM 之前不太敢這樣做 |
發表人: | kourge [ 2007-09-04, 21:40 ] |
文章主題 : | |
legnaleurc 寫: 所以說作法是
<button class="Example" attr1="blahblah" attr2="blahblah" attr3="blahblah">omote no monji</button> 然後 $$( '.Example' ).each( function( X ) { X.observe( 'click', function( E ) { var attributes = { attr1: X.readAttribute( 'attr1' ), attr2: X.readAttribute( 'attr2' ), attr3: X.readAttribute( 'attr3' ) }; } ); } ); 這樣嗎?(當然避開該element原本的屬性) 因為這種做法好像在自行擴展DOM 之前不太敢這樣做 對,像這樣: 代碼: $$('.Example').invoke('observe', 'click', function() {
var attributes = {}; var element = $(this); $w('attr1 attr2 attr3').each(function(attr) { attributes[attr] = element.readAttribute(attr); }); }); 以上的 code 作用跟你的差不多,只是稍微有點擴充性。 這樣的確有點「私自擴充」的意味,不過只要 attribute 不衝突舊好,像 Dojo 也是利用這一點。 |
發表人: | kourge [ 2007-09-17, 01:40 ] |
文章主題 : | |
突然間想到還有一個方法,就是利用 bindAsEventListener。 代碼: <button type="button" value="[myclipURI]" class="Media">click to invoke</button>
<script type="application/javascript"> $$('.Media').invoke('observe', 'click', function(e, width, height) { //e == event }.bindAsEventListener(null, 640, 480)); </script> 這樣函式被呼叫的時候,第一個參數是事件,第二個參數是 640,第三個參數是 480,this 為 window。 |
發表人: | legnaleurc [ 2007-09-17, 12:54 ] |
文章主題 : | |
不過這樣的作法還是要把script寫到HTML裡吧? 如果撰寫HTML的人想改參數的話 |
發表人: | kourge [ 2007-09-17, 13:06 ] |
文章主題 : | |
是沒錯。 |
發表人: | legnaleurc [ 2007-09-17, 13:11 ] |
文章主題 : | |
說到這個我才想到.... 不知道Trident什麼時候才會支援application/javascript....(茶) |
第 1 頁 (共 1 頁) | 所有顯示的時間為 UTC + 8 小時 |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |