2013-05-18 90 views
2

我的代码如下。我期望configureMission()内的代码在运行mapSurface之前完成运行。这似乎没有发生。Coffeescript在第一个完成执行之前运行第二个功能

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的预期结果,将其设置为变量并将该变量传递给第二个函数。

+1

@Hiroto感谢您的文法。它已经很晚了:) – happilyUnStuck

+0

'configureMission'只是绑定一个提交处理程序(每次调用时都会有一个新的处理程序)。所以它会运行,但在提交之前不会有任何可见的效果。我错过了什么? –

+0

@ muistooshort我用.on代替.live(尚未测试过),因为表单在提交之前会被DOM操纵。 ??所需的功能是点击事件与表单输入相关联,用户输入“任务”的信息,当表单提交时,此任务数据将在画布元素中进行动画,以绘制课程。我需要使用'mapSurface'函数中的'configureMission'函数中的语义化数据,而且我需要'submit'事件来处理表单数据并将其显示在页面上。那有意义吗? – happilyUnStuck

回答

1

您将异步命令视为同步命令。 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的回调位置:http://recurial.com/programming/understanding-callback-functions-in-javascript/

+0

不错,正是我需要让我的头部围绕它。谢谢 – happilyUnStuck

相关问题