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的"要逸出為&quot;
看起來有夠醜...

發表人:  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/