我正在尝试设置服务以对远程服务器执行json请求。
我在services.coffee
脚本中使用此代码:
HttpService = () ->
initialize: ->
__Model.List.destroyAll()
__Model.Item.destroyAll()
$$.get 'http://localhost:3000/lists.json', null, ((response) ->
lists = response.lists
items = response.items
$$.each lists, (i, list) ->
__Model.List.create list
$$.each items, (i, item) ->
__Model.Item.create item
), 'json'
createList: (list) ->
$$.post 'http://localhost:3000/lists.json', list, ((response) ->
), 'json'
http = new HttpService
http.initialize()
初始化方法工作正常。
我希望能够从项目的任何位置访问变量http
。
但是,我无法访问此文件外的功能。
如何全局定义?
更新
以下是CoffeeScript生成的文件
// Generated by CoffeeScript 1.6.3
(function() {
var HttpService, http;
HttpService = function() {
return {
initialize: function() {
__Model.List.destroyAll();
__Model.Item.destroyAll();
return $$.get('http://localhost:3000/lists.json', null, (function(response) {
var items, lists;
lists = response.lists;
items = response.items;
$$.each(lists, function(i, list) {
return __Model.List.create(list);
});
return $$.each(items, function(i, item) {
return __Model.Item.create(item);
});
}), 'json');
},
createList: function(list) {
return $$.post('http://localhost:3000/lists.json', list, (function(response) {}), 'json');
}
};
};
http = new HttpService;
http.initialize();
}).call(this);
答案 0 :(得分:4)
这是因为coffeescript将代码包装在top-level function safety wrapper。
中在浏览器中,您可以通过执行以下操作使其成为全局:
window.http = http
或告诉coffeescript不要通过编译-b
来执行包装:
coffee -c -b services.coffee
通常,全局变量不是一个好主意,您可能需要考虑使用像require.js这样的模块系统来组织和访问您的代码(包括不同文件中的代码)。
答案 1 :(得分:3)
这将使变量全局在浏览器的上下文中:
window.http = http