2011-06-08 37 views
0


嗨,我用JQueryUI創建聊天用戶界面。
這裏的一些代碼:JQuery UI Widget編程

$.widget("ui.chatwindow", { 
    options: { 
     nickname: "obama"; 
    }, 
    setNickname: function(nick){ 
     var self = this; 
     var id_pre = 'wchat_' + self.options.nickname; 
     $('#' + id_pre + '\\:name').text(self.options.nickname); 
    }, 
    setStatus: function(status){ 
      var self = this; 
      var id_pre = 'wchat_' + self.options.nickname; 
      switch(status){ 
       case 1: 
        $('#' + id_pre + '\\:status').removeAttr('class'); 
        $('#' + id_pre + '\\:status').addClass('chat-icon-online'); 
        $('#' + id_pre + '\\:status').attr('title','Online'); 
        break; 
        ... 
       default: 
        break;      
      } 
      ... 
     }, 
    ... 
} 

我的問題是,我總是在每一個方法寫:

var self = this; 
var id_pre = 'wchat_' + self.options.nickname; 

改變要素類或文本內容
這是代碼的好或有效的方法?
讓我知道做到這一點的好方法。

謝謝你的友善。

+1

這是http://codereview.stackexchange.com的更好的問題。 – 2011-06-08 05:24:24

+0

您的兩條'var'語句可能會比連續三次執行$('#'+ id_pre +'\\:status')'便宜。 – 2011-06-08 05:29:17

+0

我很想知道,將自己分配給自己會得到什麼? – stefgosselin 2011-06-08 05:33:31

回答

0

我認爲這將是更好的代碼審查網站,但我開始在評論中的東西,所以我想我應該完成它。

首先,如果你要保持這樣說:一遍遍

var id_pre = 'wchat_' + self.options.nickname; 

,你應該在你_create功能做只是一次:

_create: function() { 
    this.id_pre = 'wchat_' + this.options.nickname; 
    //... 
} 

然後你可以在需要時參考this.id_pre。你可以做類似的事情$('#' + id_pre + '\\:status')

_create: function() { 
    this.id_pre = 'wchat_' + this.options.nickname; 
    this.$id_pre = $('#' + id_pre + '\\:status'); 
    //... 
} 

但要記住,這樣的緩存jQuery的對象可能會導致奇怪的結果,如果你添加和刪除您包裹在$()元素。

你只需要做到這一點:

var self = this; 

,當你想引用外this回調中。這個簡單的變量是相當便宜的,所以我不會擔心它,但你應該知道這個習慣用法爲什麼存在以及什麼時候需要它。

+0

謝謝你的好意。 – 2011-06-08 08:38:44