调用客户端功能

时间:2016-03-11 22:47:38

标签: javascript meteor

此Meteor代码需要调用header.js中的函数cleanSerializedArray();,该函数在main.js中定义,两个文件都在客户端目录下。

浏览器控制台错误:

  

未捕获的ReferenceError:未定义cleanSerializedArray

但是当定义移动到同一个文件“header.js”时,控制台会说

  

未定义

为什么这两个非预期的结果,我希望看到这两种情况下的功能都有效?感谢

'use strict';
Template.header.events({
  'click .mainMenu': function () {
    //control the footer visibility
    if (Session.get('showMainMenu')) {
      Session.set('showMainMenu', false);
    } else {
      console.log(cleanSerializedArray()); //<------- called
      //Meteor.call('storeUserInputs', objArray);
      Session.set('showMainMenu', true);
    }
});

function cleanSerializedArray() {
   return $('form').serializeArray().forEach(function (item) {
    item.value = item.value.replace(/[^0-9a-zA-Z]/g, '');
  });
}

1 个答案:

答案 0 :(得分:1)

您获得undefined因为Array.prototype.forEach始终返回undefined 您可能希望将cleanSerializedArray功能更改为:

function cleanSerializedArray() {
    var array = $('form').serializeArray();
    array.forEach(function (item) {
        item.value = item.value.replace(/[^0-9a-zA-Z]/g, '');
    });
    return array;
}

至于你的ReferenceError,这通常是由两件事之一引起的:

作用域:

window.addEventListener('DOMContentLoaded', function()
{
    function myFunc(){ /* ... */ }

    /* some code that uses myFunc */
});
/* myFunc is not available out here */

定时:

window.addEventListener('DOMContentLoaded', function()
{
    window.myFunc = function(){ /* ... */ }

    /* some code that uses myFunc */
});
/* myFunc is not available yet */

由于您似乎只是从事件处理程序调用该函数,因此范围问题远比计时问题更可能。
尝试将该函数声明为:

window.cleanSerializedArray = function() {
    // ...
};