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

标签 javascript underscore.js

函数 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) {

内不可见

这是为什么?

最佳答案

setPanodata 使用点,但您没有将点传递到函数中。试试这个:

 _.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
 }

关于javascript - 为什么这个函数在这个 _.each 循环中不可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35191385/

相关文章:

javascript - 试图在 jquery 中将此菜单与此数据连接

javascript - 比较两个数组并在正则表达式后返回唯一值

javascript - 移动多维数组树的深层成员 - 使用 lodash 或下划线

javascript - 用户点击提交按钮后,如何使图像或图标显示在另一个图像上?

javascript - 用户输入时自动更正单词

javascript - 如何在不在网站上显示的情况下从 html 向 php 赋予特殊字符?

javascript - 如何将html特殊字符转换为普通HTML?

javascript - 使用 jQuery 或 Underscore.js 获取嵌套对象中字段的值

JavaScript 'this' 关键字

javascript - Functional Javascript 书籍示例中的错误