2011-08-20 100 views
1

我在处理程序流时遇到了一些麻烦,并且没有在我的web应用程序中使用Javascript的全局变量。在此示例中,调用get_notes()时,接收到的音符的ID保存在current_note_ids阵列中。当调用add_to_discussion()时,将current_note_ids作为参数发送到服务器请求。如何在不将current_note_ids作为全局变量的情况下做到这一点?如何改变这个Javascript不使用全局变量?

<script type="text/javascript"> 
    var current_note_ids = []; 

    function add_to_discussion(){ 
     $.post('/add_to_discussion',{current_note_ids:current_note_ids}); 
    } 

    function get_notes(){ 
     $.post('/get_note_combination',{}, function(data) {    
      current_note_ids = []; // clear existing note details 
      for (i in data.notes) { 
       current_note_ids.push(data.notes[i].guid); 
      } 
     } 
    } 

    $(document).ready(function() { 

     $('#add_to_discussion_button').click(function(){ 
      add_to_discussion(); 
      return false; 
     }); 

     $('#get_notes_link').click(function(){ 
      get_notes(); 
      return false; 
     }); 

    }); 

</script> 
+0

我想你可以将数组作为参数传递给你的每一个函数。 – fireshadow52

回答

4

这将删除所有使用closure

(function() { 

    var current_note_ids = []; 

    function add_to_discussion(){ 
     $.post('/add_to_discussion',{current_note_ids:current_note_ids}); 
    } 

    function get_notes(){ 
     $.post('/get_note_combination',{}, function(data) {    
      current_note_ids = []; // clear existing note details 
      for (i in data.notes) { 
       current_note_ids.push(data.notes[i].guid); 
      } 
     } 
    } 

    $(document).ready(function() { 

     $('#add_to_discussion_button').click(function(){ 
      add_to_discussion(); 
      return false; 
     }); 

     $('#get_notes_link').click(function(){ 
      get_notes(); 
      return false; 
     }); 

    }); 

})(); 
1

您可以使用匿名函数,使其OO般从全球范围代码。在这种情况下,你可以选择“暴露”什么。

var notes = $(function() { 
    var current_note_ids = []; 

    function add_to_discussion() { 
     $.post('/add_to_discussion', { 
      current_note_ids: current_note_ids 
     }); 
    } 

    function get_notes() { 
     $.post('/get_note_combination', {}, function(data) { 
      current_note_ids = []; // clear existing note details 
      for (i in data.notes) { 
       current_note_ids.push(data.notes[i].guid); 
      } 
     }) 
    } 
    return { 
     add_to_discussion: add_to_discussion, 
     get_notes: get_notes 
    }; 
})(); 

$(document).ready(function() { 

    $('#add_to_discussion_button').click(function() { 
     notes.add_to_discussion(); 
     return false; 
    }); 

    $('#get_notes_link').click(function() { 
     notes.get_notes(); 
     return false; 
    }); 

});