我正在尝试为小型 javascript 库编写一个简单的 Cakefile 构建脚本。我想对源字符串进行 gzip 压缩并将结果写入文件。这是我到目前为止所拥有的:
zlib.deflate minifiedjavaScriptSource, (error, buffer) ->
fs.writeFileSync(javascript_destination_gzipped_minified_path, buffer)
Run Code Online (Sandbox Code Playgroud)
当我运行脚本时,它.gz按预期生成了一个文件。但是,当我解压缩该文件时,我得到一个.cpgz文件。如果我尝试解压缩它,它只会再次生成原始文件。我究竟做错了什么?
我有两个(缓慢加载)数据源.我可以在加载后立即开始处理数据源2,但是需要来自1和2的数据来处理来自源1的数据.所以我有一些代码如下:
$.get 'url2', (data2) ->
$.get 'url1', (data1) ->
# do stuff with data1 and data2
# do stuff with data2
Run Code Online (Sandbox Code Playgroud)
但是,我想并行加载它们,而不是顺序加载它们(即我不想在开始加载数据源1之前等待数据源2加载).
有没有很好的设计模式呢?
CoffeeScript列表推导与Pythons略有不同......这些是人们喜欢返回列表推导的方式?
return elem+1 for elem in [1,2,3] # returns 3+1
return [elem+1 for elem in [1,2,3]].pop() # returns [2,3,4]
return (elem+1 for elem in [1,2,3]) # returns [2,3,4]
Run Code Online (Sandbox Code Playgroud)
在Python中,我只想写:
return [elem+1 for elem in [1,2,3]]
Run Code Online (Sandbox Code Playgroud)
并且它正确地返回列表,而不是列表列表,就像在CoffeeScript中一样.
我想在我的Rails 3.1应用程序中将我的javascripts分成单独的子目录.
例如,我在/ app/assets/javascripts中有一个/ modules目录
要么需要目录的所有内容,要么单独要求每个文件的方法都会有所帮助.
编辑:为了澄清,我想从我的application.js coffeescript文件中执行此操作.
我正在为一个项目组建一个基本的CRUD系统,我们决定捆绑Backbone.js和CoffeeScript来抽象更多我们的JavaScript功能.学习曲线对我来说非常陡峭,因为我不是一个JS专业人士.
目前,我只是想拉一记.任何记录.因此,在我前进之前,我已经装配了一条虚拟路线,通过JSON提供"产品"记录集,以了解它是如何呈现的.
window.Product = Backbone.Model.extend
initialize: -> console.log this
window.Products = Backbone.Collection.extend
model: Product
initialize: -> console.log this
url: '/dummy'
Run Code Online (Sandbox Code Playgroud)
所以,在控制台中,我输入:
product = new Product()
Run Code Online (Sandbox Code Playgroud)
它似乎使产品很好.但是当我键入:
product.fetch()
Run Code Online (Sandbox Code Playgroud)
它返回:
TypeError: Cannot call method 'ajax' of undefined
Run Code Online (Sandbox Code Playgroud)
我和Collection尝试过同样的事情.
products = new Products()
products.fetch()
TypeError: Cannot call method 'ajax' of undefined
Run Code Online (Sandbox Code Playgroud)
我已经使其他部分(查看渲染等)工作得很好,但这个ajax错误反复出现在我身上.我花了几个小时查看不同的文档(包括官方文档,以及我可以从wiki中查找的所有信息),在纯JavaScript和CoffeeScript中尝试代码,实现不同的范围(有/没有窗口命名空间)等等.谷歌上没有任何东西.
这一定是我应该知道的非常简单的事情,但我无法弄清楚我的生活.或者它是我错过的文档中的一个位置.谁能告诉我我做错了什么?
如何将此功能转换为兼容coffeescript的版本?
我的主要问题是fb.login ..但是我尝试我似乎总是失去其中一个参数或权限......
function promptLogin(login_level, callback)
{
var cbk = callback;
FB.login(function(response) {
if (response.session) {
if (response.perms) {
cbk( true, response );
} else {
cbk( false, response );
//showAlert( "Please accept the permissions.", 'Error' );
}
} else {
cbk( false, response );
//showAlert( "Please accept the permissions.", 'Error' );
}
}, {perms:'email,publish_stream'}
);
}
Run Code Online (Sandbox Code Playgroud)
最感谢......
加雷思
编辑
感谢下面的所有答案,有些工作没有,有些导致我其他问题.
我已经确定了解决方案的混合搭配:
login: (permissions = '', callback) ->
responseHandler = (response) ->
if response.session
if permissions && permissions != '' …Run Code Online (Sandbox Code Playgroud) 在CoffeeScript中,虽然此代码几乎与JavaScript相同:
tabs_html = "<div id='nm-container'><ul><li><a href='#tabs-1'>Guidelines</a></li><li><a href='#tabs-2'>Test</a></li></ul>
<div id='tabs-1'><p>something1</p></div><div id='tabs-2'><p>something2</p></div></div>"
$("#nm-toolbar").append(tabs_html)
$("#nm-container").tabs()
Run Code Online (Sandbox Code Playgroud)
它不起作用.有趣的是,它在尝试最后一行时起作用:$("#nm-container").tabs()从控制台.我附上下面的完整代码.请注意,我正在使用CoffeeMarklet生成似乎仅适用于chrome的bookmarklet.
s1 = window.document.createElement('script')
s1.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js'
window.document.body.appendChild(s1)
$ ->
s2 = window.document.createElement('script')
s2.src = 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.7/jquery-ui.min.js'
window.document.body.appendChild(s2)
jqueryUIcss = window.document.createElement('link')
jqueryUIcss.rel = 'stylesheet'
jqueryUIcss.type = 'text/css'
jqueryUIcss.href = 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.10/themes/blitzer/jquery-ui.css'
window.document.head.appendChild(jqueryUIcss)
if $("#nm-toolbar").length == 0
toolbar = "<div id='nm-toolbar'></div>"
$("body").append(toolbar)
$("#nm-toolbar").css({
'background': '#fafafa',
'height': '500px',
'width': '400px',
'position': 'fixed',
'bottom': '0px',
'right': '20px',
'padding': '5px'
})
tabs_html = "<div id='nm-container'><ul><li><a href='#tabs-1'>Guidelines</a></li><li><a href='#tabs-2'>Test</a></li></ul>
<div id='tabs-1'><p>something1</p></div><div id='tabs-2'><p>something2</p></div></div>" …Run Code Online (Sandbox Code Playgroud) 在rails 3.1中使用coffeescript,jQuery和链轮,将coffeescript文件编译为以下块:
(function() {
var a;
var b;
var c;
foo = function() {
alert("foo");
}
bar = function() {
alert("bar");
}
}).call(this);
Run Code Online (Sandbox Code Playgroud)
这似乎将函数foo和bar移出了全局范围,因此bar可以由foo调用,但不能从html代码中调用。当我尝试从select onchange元素调用foo时,出现“找不到变量:foo”。
现在的解决方法是将所有全局可用的功能移至.js文件。但是,这样做的正确方法是什么?
谢谢
我正在尝试在node.js中获得CoffeeScript.compile的功能.
我在Windows中安装了Cygwin节点,并用npm安装了咖啡脚本.
我可以使用咖啡命令,但如果我尝试
require("coffee-script");
Run Code Online (Sandbox Code Playgroud)
我在节点中找到"无法找到模块'咖啡脚本'".
我是以错误的方式来做这件事的吗?
任何人都可以解释为什么这不起作用?我只是在CoffeeScript页面的"立即尝试Coffeescript"的情况下运行它,我的Chrome控制台记录了"nope",如下所示
x = true
foo = (x = x) ->
console.log if x then "works" else "nope"
foo() # "nope"
Run Code Online (Sandbox Code Playgroud)
如果我在参数定义中将x = true更改为y = true而将(x = x)更改为(x = y)
太感谢了!
coffeescript ×10
javascript ×5
jquery ×3
node.js ×2
assets ×1
asynchronous ×1
backbone.js ×1
bookmarklet ×1
cakefile ×1
cygwin ×1
facebook ×1
jquery-ui ×1
sprockets ×1
zlib ×1