2014-11-21 95 views
-1

我在管理Javascript應用程序各部分之間的數據時遇到問題。我試圖堅持一種「MVC」模式,所以用MVC術語講,我不能讓我的一些「C」(控制器)函數訪問由「M」(模型)給出的數據。具體來說,我不能讓事件函數達到數據,而不使數據全球化(我想盡量避免)。Javascript - web應用程序結構

一個由情況只是向你展示我的意思:

HTML:

<body> 
    <div onclick="func()"></div> 
</body> 

JS:

var Data = function(num) { 
    this.num = num; 
} 

window.onreadystatechange = function() { 
    var data = new Data(5); 
} 

function func() { 
    //How do i access the object "data" from here? 
} 

的問題是:如何使事件處理程序的訪問數據?

回答

2
var Data = function(num) { 
    this.num = num; 
} 

var data; 

window.onreadystatechange = function() { 
    data = new Data(5); 
} 

function func() { 
    //data.num 
} 

你必須在訪問的範圍數據申報FUNC

如果你擔心的全局變量,你可以做到這一點

var service = {}; 

(function(service) { 
    var Data = function(num) { 
     this.num = num; 
    } 

    var data; 

    window.onreadystatechange = function() { 
     data = new Data(5); 
    } 

    service.func = function func() { 
     //data.num 
    } 
})(service); 


//call the function 
service.func(); 

這將調用它在一個自執行閉包將阻止變量進入全局範圍。您可以傳入一個服務實例並將func方法附加到它以便能夠調用它。 Jquery插件通常遵循這種模式。

+0

這是使它全球化,就像他說:) – 2014-11-21 04:31:25

+0

你需要現在暴露func – 2014-11-21 04:33:03

+0

@KeithNicholas我同意。添加了一個解決方案 – TGH 2014-11-21 04:33:13