当我使用最新的(1.0)咖啡脚本时,一个简单的javascript输出看起来像这样(默认情况下):
(function() {
var a;
a = 1;
}).call(this);
Run Code Online (Sandbox Code Playgroud)
是什么.CALL(本)做,哪些是添加它的原因是什么?
来自Python,我喜欢Coffeescript从Python和Perl借用的许多功能(范围/切片,理解,解构分配).Coffeescript中是否存在模仿Python enumerate或zip(itertools.izip)函数的语法糖?
以下是我不太关心的模式:
# an enumerate call would be helpful here
i = 0
for x in arr
... use x and i ...
i++
Run Code Online (Sandbox Code Playgroud)
和
# a zip would be useful here
n = Math.min(arr1.length,arr2.length)
for i in 0...n
x = arr1[i]; y = arr2[i]
... use x and y ...
Run Code Online (Sandbox Code Playgroud) 我试图基于Twitter bootstrap-modal创建一个Backbone.js视图,它通过events视图的属性使用Backbone的自动事件委托.
不幸的是,bootstrap-modal似乎破坏了Backbone的事件委托,因为它在显示模式之前克隆了视图HTML:
that.$element
.appendTo(document.body)
.show()
Run Code Online (Sandbox Code Playgroud)
我的看法:
App.Views.ProjectsNav ||= {}
class App.Views.ProjectsNav.NewProjectView extends Backbone.View
events: {
'click .save': 'save',
'shown': 'shown'
}
save: (e) ->
...
false
shown: () ->
App.Helpers.Forms.setFocus($(@el), true)
false
render: () ->
$(@el).html(ich.nav_edit_project_template(@model.toJSON()))
@$('.modal').modal({'show': true, 'keyboard': true, 'backdrop': true})
@
Run Code Online (Sandbox Code Playgroud)
相应的(Mustache)HTML模板:
<div class="modal hide" style="display: none; ">
<div class="modal-header">
<a href="#" class="close">×</a>
<h3>New Project</h3>
</div>
<div class="modal-body form-stacked">
<label for="name">Name</label> <input type="text" name="name" value="{{name}}"/><input type="hidden" name="lock_version" value="{{lock_version}}"/>
</div>
<div class="modal-footer">
<a href="javascript:void(0)" class="save btn …Run Code Online (Sandbox Code Playgroud) 基于我所读到的内容(如果我弄错了,请纠正我),处理模型应该保存的逻辑以及下一步转换的逻辑应该在路由器中.
如果是这种情况,我遇到了一个问题:我不知道如何从路线访问模型.
这是我的控制器(并且在我按下提交后控制台记录"CREATED"):
App.ScoutsNewController = Ember.ObjectController.extend
submit: ->
model = @get('model')
model.on 'didCreate', ->
console.log 'CREATED' # I want to redirect to the index after creation
model.save()
Run Code Online (Sandbox Code Playgroud)
我应该将这条逻辑移到路线上,对吗?我们试试看:
App.ScoutsNewRoute = Ember.Route.extend
model: ->
App.Scout.createRecord()
events:
submit: ->
# Based on what I've read, the right place to put the code you see in the controller is here. How do I get access to the model?
# I have tried @get('model'), @get('content')
Run Code Online (Sandbox Code Playgroud)
注意:我知道提交事件从视图,控制器,然后最终路由起泡,停在任何一个已定义"提交"的路由.因为我想要路由来处理它,我删除了控制器.我能够console.log在路线中看到任何完成,我只需要能够到达模型实例.
我正在使用 Ember v1.0.0-rc.5-7-g610589a
谢谢!
在coffeescript中是否有对命名空间的内在支持?
足够的命名空间似乎是coffeescript可以真正帮助的东西,虽然我似乎无法找到任何暗示有支持的东西.
在JavaScript中,如何测试一个数组是否具有另一个数组的元素?
arr1 = [1, 2, 3, 4, 5]
[8, 1, 10, 2, 3, 4, 5, 9].function_name(arr1) # => true
Run Code Online (Sandbox Code Playgroud) 我一直在看CoffeeScript,我不明白你将如何编写这样的代码.它如何在语法中处理嵌套的匿名函数?
;(function($) {
var app = $.sammy(function() {
this.get('#/', function() {
$('#main').text('');
});
this.get('#/test', function() {
$('#main').text('Hello World');
});
});
$(function() {
app.run()
});
})(jQuery);
Run Code Online (Sandbox Code Playgroud) 在Github上查看CoffeeScript的源代码时,我注意到大多数(如果不是全部)模块定义如下:
(function() {
...
}).call(this);
Run Code Online (Sandbox Code Playgroud)
这种模式看起来像是将整个模块包装在匿名函数中并调用自身.
这种方法的优点和缺点是什么?还有其他方法可以实现相同的目标吗?
我有一个元素数组,我想应用一个映射来将它转换为单个对象上的键值对(模仿一个关联数组).
Can destructuring assign中的方法可用于在CoffeeScript中实现投影吗?似乎不适合我,因为它导致一个简单的数组而不是键/值对.
我选择的语言是CoffeeScript或JavaScript.
一个例子:
[{name: 'a', value: 'b', other: 'c'}, {name: 'd', value: 'e', other: 'f'}]
Run Code Online (Sandbox Code Playgroud)
应该被转化为:
{
a: 'b',
d: 'e'
}
Run Code Online (Sandbox Code Playgroud)
单线是首选.;-)
这是我的代码(它是coffeescript并使用颜色,但这不相关)
if !module.parent
try
hons_server.listen config.port
console.log 'Listening to port ' + config.port
catch err
console.error "Couldn't start server: #{String(err)}".red
Run Code Online (Sandbox Code Playgroud)
hons_server是一个express.js服务器.我很难理解为什么抛出的错误hons_server.listen()不会被try/catch捕获.当我运行我的服务器两次时,我得到输出:
$ coffee src/server.coffee
Listening to port 9090
node.js:201
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: listen EADDRINUSE
at errnoException (net.js:632:11)
at Array.0 (net.js:733:26)
at EventEmitter._tickCallback (node.js:192:40)
我想知道为什么没有捕获抛出的错误,以及我如何/在哪里可以捕获EADDRINUSE错误.
coffeescript ×10
javascript ×6
node.js ×2
arrays ×1
backbone.js ×1
ember.js ×1
express ×1
jquery ×1