2013-05-08 46 views
2

我有一個關於jQuery和DOM操作的問題。如何處理DOM控件你如何處理jQuery中的控件綁定

我得從文本輸入值,所以我會這樣的方式:

var SomeClass = function() { 
    var control; 

    this.setControl = function(c) { 
     control = c; 
    } 

    this.getValue = function() { 
     return control.val(); 
    } 
} 

$(document).ready(function() { 
    var sc = new SomeClass(); // of course control could be passed in contructor as well 
    sc.setControl($('#CONTROL')); 
    console.log(sc.getValue()); 
}); 

OR

var SomeClass = function() { 
    var control = $('#CONTROL'); 

    this.getValue = function() { 
     return control.val(); 
    } 
} 

$(document).ready(function() { 
    var sc = new SomeClass(); 
    console.log(sc.getValue()); 
}); 

你有什麼看法?什麼更好或者這可能是一堆垃圾,因此最好的解決方案是什麼。 Plz不要把我送到骨幹,脊椎等Im只在jquery中進行干預。

最好!

編輯:

你分開的邏輯從UI,或者你混呢? 更復雜的示例

在js文件中,您有一個使用文本控件的類,並且在secound js文件中還需要此輸入的值。你在做什麼?你只需要每次調用$('#control')或者創建第三個js文件,這將是一個分離的「類」來操縱這個輸入?

+0

我不認爲這給你任何額外的好處 – 2013-05-08 06:57:45

+1

無需綁定控件類,只需直接將它綁定到var,它在js中沒問題。傳遞給構造函數的 – sayume 2013-05-08 07:09:41

回答

1

這將更有意義移動的setValue()的構造函數中:

SomeClass = function(c) { 
    var control = c; 

    return { 
     getValue: function() { 
      return control.val(); 
     } 
    } 
} 

var x = new SomeClass($('input')); 

alert(x.getValue()); 

不過,我不知道如何寶貴的這種信息隱藏的會。也許作爲某種視圖封裝。

在很多情況下,你就不需要這個包裝,所以才:

var $x = $('input'); // keep reference to a bunch of <input> elements. 
+0

確實讓sence得到了,但是我想知道@sayume(plz看上面的註釋)是正確的:「直接將它綁定到var,在js中就可以了」 - 也許創建包裝控件的類不是一個好想法呢?可能在需要時每次調用$('#xxx')它的okey? – reizals 2013-05-08 09:14:20

+0

使用var來綁定控件是爲了避免每次都調用「$('#XXX')」,dom元素是暫時存儲的,您可以在每次不搜索dom樹的情況下訪問它,這就是主意。 – sayume 2013-05-08 09:34:18

+1

@reizals由於最重要的一點是「緩存」dom引用,所以在大多數情況下,jQuery對象本身就足夠好了。 – 2013-05-08 09:41:38

相關問題