2011-06-08 50 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

相关问题