2016-01-13 29 views
2

我已經創建了一個包含唯一我想要使用的功能,新的client.messages2.js文件,並改寫了根據喬納森的建議,這些函數調用Javascript對象:錯誤從另一個文件

var clientMessages = function(){ 
var self = this; 

self.message = function (type) { 
    var that = {}; 
    that.type = type; 
    return that; 
}; 

self.request = function (type) { 
    var that = message(type); 
    return that; 
}; 

self.request = function (type) { 
    var that = message(type); 
    return that; 
}; 

self.requestConfiguration = function (type, params) { 
    var that = request(type); 
    [...some code here...] 
    return that; 
}; 

self.requestGetConfiguration = function (params) { 
    var that = requestConfiguration("RequestGetConfiguration", params); 
    return that; 
}; 

self.requestSetConfiguration = function (params) { 
    var that = requestConfiguration("RequestSetConfiguration", params); 
    return that; 
}; 
} 
var clientMessages = new clientMessages(); 

以下文件加載在HTML文件中:

<script src="{{ url_for('static', filename='lib/jquery-1.11.3.min.js') }}"></script> 
<script src="{{ url_for('static', filename='lib/require.js') }}"></script> 
<script src="{{ url_for('static', filename='scripts/clientlibs/client.messages2.js') }}"></script> 

在main.js的代碼是:

var clientMessages = require(["/static/scripts/clientlibs/client.message2.js"]); 
var request = clientMessages.requestGetConfiguration({}); 

我也試着requestGetConfiguration沒有括號:

var clientMessages = require(["/static/scripts/clientlibs/client.message2.js"]); 
var request = clientMessages.requestGetConfiguration; 

在第一種情況下,我得到這個錯誤:

Uncaught TypeError: clientMessages.requestGetConfiguration is not a function

在這兩種情況下,我得到如下:

Failed to load resource: the server responded with a status of 404 (NOT FOUND) require.js:8 Uncaught Error: Script error for "/static/scripts/clientlibs/client.message2.js" http://requirejs.org/docs/errors.html#scripterror

請注意我可以在Chrome瀏覽器中查看和編輯client.message2.js。它位於localhost:5000/static/scripts/clientlibs/client.message2.js

+0

聽起來像範圍問題。你可能需要提供更多的代碼,這樣我們才能確定「var request」的範圍。 – bob

+0

我已經添加了更多的代碼,希望現在更清楚。 – Galil

+0

在你的代碼的最後一行,你通過clientMessages的實例來覆蓋你的構造函數clientMessages,並且在require()行中使用相同的(全局的)... – fast

回答

0

它看起來像一個示波器問題。

由於前綴var您的函數requestSetConfiguration是私有的。

爲使公用功能,儘量使用類似:

var self = this; 
self.clientMessages { ... 

一個例子如何做到這一點:

clientMessages.js:(看,我更改文件名)

var ClientMessages = function(){ 
    var self = this; 
    self.requestSetConfiguration = function(params){...}; 
} 
var clientMessages = new ClienteMessages(); 

main.js :(首先你必須在你的html文件中導入clientMessages.js和main.js,或者在main.js中需要clientMessages.js,執行一些AMD

... 
clientMessages.requestSetConfiguration(params); 
+0

做你在client.messages.js意味着應該是這樣的: '限定([ 「./ client.parameters」], 函數(clientParameters){ 變種自=此; \t self.clientMessages = {' 因爲我做到了,它沒有工作... – Galil

+0

沒有其他的,我會編輯我的答案來幫助你 –

+0

謝謝你的幫助,但我不能讓它工作,我遵循你的建議,並添加了要求。js和然後在我的主要添加以下代碼: '需要([ 「./庫/ client.messages.js」],函數(clientMessages){ VAR請求= clientMessages.requestGetConfiguration; });' 結果是錯誤消息「需求未定義」。我也試過用define,但是錯誤信息是一樣的(「define is not defined」)。 – Galil