为什么这个函数在_.each循环中不可见?

时间:2016-02-04 02:24:06

标签: javascript underscore.js

function setPanodata()在保存前准备panodata

          if (confirm('Are you sure you want to update this?')) {
            var query = new AV.Query('PanoramaData')
            query.equalTo('roomModelId', currentPanoId)
            query.find().then(function(avpds) {
              var addedAVs = []
              var unsavedPDs = []
              var unchangedPDs = _.filter(avpds, function(avpd) {
                return _.find(scope.panodatas, {
                  objectId: avpd.id
                })
              })
              _.each(unchangedPDs, function(unchangedPD) {
                // Offset x and y before save
                unchangedPD.set('x', offsetX(scope.panodatas[unchangedPD.get('index')].x))
                unchangedPD.set('y', offsetY(scope.panodatas[unchangedPD.get('index')].y))
                unsavedPDs.push(unchangedPD)
              })
              var addedPds = _.filter(scope.panodatas, function(pd) {
                return !pd.objectId
              })
              _.each(addedPds, function(point) {
                var Panodata = AV.Object.extend('PanoramaData')
                var panodata = new Panodata()
                addedAVs.push(setPanodata(panodata))
              })
              unsavedPDs = unsavedPDs.concat(addedAVs)
              console.log(unsavedPDs)
              saveAllPanodatas(unsavedPDs)
            })
          }

          function setPanodata(panodata) {
            panodata.set('index', point.index)
            panodata.set('x', offsetX(point.x))
            panodata.set('y', offsetY(point.y))
            panodata.set('roomModelId', scope.pano.id)
            panodata.set('panoDataRotate', 0)
            panodata.set('differentLayout', false)
            panodata.set('panoCount', 6)
            panodata.set('type', 'VRoom')
            console.log('PANODATA', panodata)
            return panodata
          }

最初,我将其内容放在_.each(addedPds, function(point) {内,但决定将其转换为使代码更清晰的函数。

但是,console.log('PANODATA', panodata)不会记录任何内容。因此setPanodata()

中无法看到_.each(addedPds, function(point) {

为什么会这样?

1 个答案:

答案 0 :(得分:2)

setPanodata使用point,但是你没有将点传递给函数。试试这个:

 _.each(addedPds, function(point) {
     var Panodata = AV.Object.extend('PanoramaData');
     var panodata = new Panodata();
     addedAVs.push(setPanodata(panodata, point));
 });

 function setPanodata(panodata, point) {
    panodata.set('index', point.index)
    panodata.set('x', offsetX(point.x))
    panodata.set('y', offsetY(point.y))
    panodata.set('roomModelId', scope.pano.id)
    panodata.set('panoDataRotate', 0)
    panodata.set('differentLayout', false)
    panodata.set('panoCount', 6)
    panodata.set('type', 'VRoom')
    console.log('PANODATA', panodata)
    return panodata
 }