2015-03-25 2 views
0

Я использую Meteor для Windows. Я пытаюсь запустить функцию в breadcrumb.js, которая находится в/client/lib , и я продолжаю получать эту ошибку. ReferenceError: initBreadcrumb не определен. Я программист на Java, и я не уверен, что я просто пытаюсь вызвать intiBreadcrumb() неправильно или если есть что-то странное с Meteor, к которому я не привык.ReferenceError: не определен с помощью 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); 
    } 
} 

ответ

0

Вы должны изменить код определения функции.

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

Тогда ваша функция может быть запущена в вашем коде шаблона. Это сделает вашу функцию глобальной.

+0

Большое спасибо. Работал как шарм. – coldfry

2

Вы должны понимать, как работает JavaScript scope. Существует глобальный и локальный охват. Метеор оборачивает все * .js файлы функцией (closure):

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

Так что ваши функции становятся локальными.

Если вы хотите определить глобальную функцию закрытия необходимо определить его в качестве глобальной переменной:

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

Спасибо за объяснение, о котором мне было интересно. – coldfry

Смежные вопросы