作者TonyQ (沉默是金。)
看板Ajax
標題Re: [問題] 參數相互傳遞的問題
時間Wed Nov 24 18:21:54 2010
※ 引述《JYHuang (夏天到了,冷不起來了說)》之銘言:
: 舉個例來說,之前有寫個grid的函式
: 會在table上加些功能。
: $("table").grid({'resize':true})
: $.fn.grid = function(param){
: var p = $.extend({
: resize : false,
: .... : true
: },param)
: var table = $(this);
:
: // 相關的處理函式
: var acts= {
: resize_col:function(){
: if(p.resize){
: //縮放表格寬度的程式
: $("thead th",this).each(function(){
: do some thing~
: }
: }
: },
: blablabla :function(){
: }
: }
: }
: 一些動作跟參數就省略了,
: 主要的用意是在thead上的th做拖拉縮放時tbody下的欄位也會跟著變寬
: 因為一些event是在.grid()時就加上去了
: 如果後來又新增一個column,會變成後來新增的並沒有掛上event..
是這個需求的話,考慮一下掛 live event 也是個方案喔,
如果有機會掛成 live event 是最簡單啦~
我覺得你這需求如果不用live ,
應該是要把 掛event 這件事寫成 static utilty ,
你說得功能照我的習慣我大概會這樣作
ex.
var ColumnEvent = {
register:function(target){
$(target) // do something
}
};
// ColumnEvent.register(column) ;
$.fn.grid= function(){
$columns = $("....");
$columns.each(function(){
ColumnEvent.register(this);
});
}
$.fn.addColumn= function(data){
var column = buildColumn(data);
ColumnEvent.register(column);
}
如果要共享資料或function的話,可以考慮把資料放在data裡面。
$(this).data("key","value") ;
基本上很多方法啦,因為你沒有把 Column 的方式講出來,
但是大抵上,就是資料怎麼存跟事件對象怎麼拿到而已,
多繞個幾圈總是拿得到的。
我的習慣是不同的事情有不同的 delegater ,所以看到 funcA 跟 funcB ,
我的第一個直覺就是寫個 funcC 來讓他們互動。
: 因此要先在grid()裡先加新增column並掛上event的函式
: 然後在grid()的外部去呼叫這個新增的函式並且把參數傳進去
: --
: var B = funcB()
: 用上面的例子來說會是
: var table1 = $("table.tab1").grid(..)
: 先把<table class="tab1">加掛grid的功能上去
: 當有新的欄位被加進來時
: table1.addCol(..)
: 這樣來掛上述的拖拉縮放的行為。
--
I am a person, and I am always thinking .
Thinking in love , Thinking in life ,
Thinking in why , Thinking in worth.
I can't believe any of what ,
I am just thinking then thinking ,
but worst of all , most of mine is thinking not actioning...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.133.44.37
推 JYHuang:要描述column的話會落落長 11/24 22:00
→ JYHuang:先是產生drag bar、然後加上mousedown=startdrag() 11/24 22:01
→ JYHuang:mousemove=dragging() ; mouseup=drag_end() 11/24 22:01
→ JYHuang:drag_end()裡還會呼叫repose去重新定位drag bar 11/24 22:02
→ JYHuang:接著把tbody的對應欄位設定寬度. 11/24 22:02
→ JYHuang:講了這麼多,其實大多是參考flexgrid的流程寫的 :p 11/24 22:03
→ TonyQ:試著把函式抽象化啊,描述不見得要描述實作。 11/24 22:55
推 JYHuang:不知道能不能把Object包起來丟到 $(this).data 11/25 09:05
→ TonyQ:當然可以啊 :D 11/25 11:17
→ TonyQ:你的問題其實是架構的問題 這蠻值得討論的。 11/25 11:17
→ TonyQ:我很想針對這主題開一章,不過最近工作實在太忙了......-_-# 11/25 19:21