Coffeescript在第一个函数完成执行之前运行第二个函数
我的代码如下。我希望Coffeescript在第一个函数完成执行之前运行第二个函数,coffeescript,design-patterns,Coffeescript,Design Patterns,我的代码如下。我希望configureMission()中的代码在运行mapSurface之前完成运行。这似乎没有发生 missionCommands = "" # you don't have a mission yet $('#startExploration').click -> # Set #missionControl as input for game configuration configureMission() mapSurface()
configureMission()
中的代码在运行mapSurface
之前完成运行。这似乎没有发生
missionCommands = "" # you don't have a mission yet
$('#startExploration').click -> # Set #missionControl as input for game configuration
configureMission()
mapSurface()
configureMission =->
$('#MissionControl').on "submit", ->
# cool helper function shamelessly pinched from http://jsfiddle.net/sxGtM/3/
$.fn.serializeObject = function() # not shown
missionCommands = JSON.stringify($('form').serializeObject())
return false #stops click event from firing
mapSurface =->
console.log('map')
console.log(missionCommands)
我注意到,如果我再次提交表单,则missionCommands
变量已使用json数据更新,因此表单数据似乎已被处理,但这是在第二个函数运行后发生的
map login.js:60
login.js:61
map login.js:60
{"xMaximum":"","yMaximum":"","xCoord":["iuoiuyi",""],"yCoord":["",""],"orientaiton":["",""]} login.js:61
我可以通过在
configureMission
函数中移动mapSurface
函数使其工作,但这似乎是一种糟糕的形式。我想知道,是否有一种更正确的模式可以用来实现将表单数据处理为json的预期结果,将其设置为变量并将变量传递给第二个函数。您将异步命令视为同步命令。JavaScript(以及CoffeeScript)是异步工作的,这意味着函数将并行运行
您可以通过指定mapSurface()
作为configureMission()
的回调来解决此问题,如下所示:
missionCommands = ""
$('#startExploration').click ->
configureMission(mapSurface)
configureMission = (cb) ->
console.log "now running configureMission()"
$('#MissionControl').on "submit", ->
$.fn.serializeObject = function() # not shown
missionCommands = JSON.stringify($('form').serializeObject())
console.log "completed configureMission()"
return cb()
mapSurface = ->
console.log "now running mapSurface()"
console.log missionCommands
console.log "completed mapSurface()"
在这里了解JavaScript回调:。@Hiroto感谢语法提示。已经很晚了:)
configureMission
只是绑定了一个提交处理程序(每次调用时都会绑定一个新的处理程序)。所以它会运行,但在提交之前不会有任何可见的效果。我遗漏了什么?@muistooshort我使用.on代替.live(尚未测试),因为表单将在提交之前由DOM操纵??所需的功能是,点击事件与表单输入关联,用户输入“任务”的信息,当表单提交时,任务数据将在画布元素中设置动画,以绘制路线。我需要使用mapSurface
函数中的configureMission
函数中的jsonified数据,并且我需要“submit”事件来处理表单数据并将其显示在页面上。这有意义吗?问题是,configureMission
对JSON没有任何作用,它只是绑定了一个提交,该提交将构建MissionCommand
。顺序类似于configureMission()
,mapSurface()
,随着时间的推移,将调用提交处理程序。感谢您的输入。关于如何使用JSON有什么建议吗?为了给你一些上下文,我在rails应用程序的主干视图中使用它。我不需要传递它,我只想在窗体旁边的画布元素上生成一个图形。很好,这正是我所需要的。谢谢