2013-07-22 3 views
3

Когда я определяю переменную lists, как показано ниже, и введите lists в консоли, я получаю ошибку ReferenceError: lists is not definedОпределение переменной в Meteor.js

var lists = new Meteor.Collection('Lists'); 

if (Meteor.isClient) { 
    Template.hello.greeting = function() { 
    return "my list."; 
    }; 

    Template.hello.events({ 
    'click input' : function() { 
     // template data, if any, is available in 'this' 
     if (typeof console !== 'undefined') 
     console.log("You pressed the button"); 
    } 
    }); 
} 

if (Meteor.isServer) { 
    Meteor.startup(function() { 
    // code to run on server at startup 
    }); 
} 

Он работает только тогда, когда я объявляю lists как глобальная переменная:

lists = new Meteor.Collection('Lists'); 

Вопрос: Зачем это глобальный охват?

+0

[JavaScript Primer for Meteor] (https://www.discovermeteor.com/blog/javascript-for-meteor/) – KyleMit

ответ

8

Чтобы получить доступ к консоли lists, вы должны использовать глобальную область, поскольку консоль выходит за пределы самого файла, поскольку Консоль считается его собственным файлом.

С var вы можете получить доступ к lists в любом месте файла.

По существу каждый файл завернут в function() {..}. Вот почему переменные каждого файла не могут быть доступны за пределами них.

Причина, по которой существует переменная область видимости, немного сложнее, но больше связана с модулями сторонних пакетов/npm. Каждый пакет должен иметь свою собственную область, которая не имеет именных столкновений с вещами снаружи.

Если вы хотите использовать его более нормально, вы можете поместить его в папку /compatibility.

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