【问题标题】:ReferenceError: is not defined with MeteorReferenceError:没有用 Meteor 定义
【发布时间】:2015-03-25 18:06:22
【问题描述】:

我正在使用 Meteor for Windows。我正在尝试在 /client/lib 中的 breadcrumb.js 中运行一个函数 我不断收到这个错误。 ReferenceError:未定义 initBreadcrumb。我是一名 Java 程序员,我不确定我是否只是想调用 intiBreadcrumb() 错误,或者 Meteor 是否有一些我不习惯的奇怪之处。

我在 index.js 中这样引用它:

if (Meteor.isClient) {
     // counter starts at 0
     Session.setDefault('json', "Hello");

     Template.div1.created = function() {
         initBreadcrumb();
     }
}

这里是 breadcrumb.js 代码:

var breadcrumbList;
var crumbItems = [];
var variableCrumb;

function initBreadcrumb() {
     var breadcrumb=$('<div>');
     breadcrumb.addClass('breadcrumb');

     breadcrumbList=$('<ul>');
     breadcrumbList.addClass('breadcrumb_list');
     breadcrumbList.appendTo(breadcrumb);

     // Always add homepage icon
     var homeIcon=$("<img>");
     homeIcon.attr('alt','Homepage');
     homeIcon.attr('src','../../public/images/home.png');

     addCrumb('index.html', homeIcon, 'breadcrumb_first');


     breadcrumb.prependTo($('body'));
}

function addCrumb(link, content, className) {
     var newListItem=$('<li>');
     if (className != undefined)
         newListItem.addClass(className);
     var newLink=$('<a>');
     newLink.attr('href', link);

     content.appendTo(newLink);
     newLink.appendTo(newListItem);
     newListItem.appendTo(breadcrumbList);

     crumbItems.push(newListItem);
}

function addTextCrumb(linkHref, linkText) {
     var newLink=$('<a>').text(linkText);
     addCrumb(linkHref, newLink, 'breadcrumb_text');
     return newLink
}

/***
* Set the "variable" crumb - i.e. the page content crumb
*/
function setVariableCrumb(linkHref, linkText) {
     if (variableCrumb == undefined) {
         variableCrumb=addTextCrumb(linkHref, linkText);
     } else {
         variableCrumb.text(linkText);
     variableCrumb.attr('href', linkHref);
     }
}

【问题讨论】:

    标签: meteor breadcrumbs


    【解决方案1】:

    您必须了解JavaScript scope 的工作原理。有全局范围和局部范围。 Meteor 将所有 *.js 文件按函数包装(closure):

    (function() {
      //local function
      function yourFunction() {
        //code
      }
    })()
    

    所以你的函数变成了本地函数。

    如果要在闭包中定义全局函数,则需要将其定义为全局变量:

    (function() {
      //global function
      yourFunction = function() {
        //code
      }
    })()
    

    【讨论】:

      【解决方案2】:

      你必须更改函数定义代码。

      initBreadcrumb = function(){...};
      addCrumb = function(link, content, className){...};
      addTextCrumb = function(linkHref, linkText){...};
      ...
      

      然后您的函数可以在您的模板代码中运行。 这将使您的功能全球化。

      【讨论】:

      • 非常感谢。像魅力一样工作。
      猜你喜欢
      • 1970-01-01
      • 2019-08-07
      • 2016-01-02
      • 2020-07-13
      • 1970-01-01
      • 2021-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多