ReferenceError: is not defined with Meteor
ReferenceError: is not defined with Meteor
我正在为 Windows 使用 Meteor。我正在尝试 运行 breadcrumb.js 中的一个函数,该函数位于 /client/lib
我一直收到这个错误。 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);
}
}
您必须更改函数定义代码。
initBreadcrumb = function(){...};
addCrumb = function(link, content, className){...};
addTextCrumb = function(linkHref, linkText){...};
...
那么你的函数可以在你的模板代码中运行。
这将使您的功能成为全球性的。
你必须明白JavaScript scope works. There is global and local scope. Meteor wraps all *.js files by function (closure):
(function() {
//local function
function yourFunction() {
//code
}
})()
所以你的函数变成了本地函数。
如果你想在闭包中定义全局函数,你需要将它定义为全局变量:
(function() {
//global function
yourFunction = function() {
//code
}
})()
我正在为 Windows 使用 Meteor。我正在尝试 运行 breadcrumb.js 中的一个函数,该函数位于 /client/lib 我一直收到这个错误。 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);
}
}
您必须更改函数定义代码。
initBreadcrumb = function(){...};
addCrumb = function(link, content, className){...};
addTextCrumb = function(linkHref, linkText){...};
...
那么你的函数可以在你的模板代码中运行。 这将使您的功能成为全球性的。
你必须明白JavaScript scope works. There is global and local scope. Meteor wraps all *.js files by function (closure):
(function() {
//local function
function yourFunction() {
//code
}
})()
所以你的函数变成了本地函数。
如果你想在闭包中定义全局函数,你需要将它定义为全局变量:
(function() {
//global function
yourFunction = function() {
//code
}
})()