2013-07-22 73 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入門](https://www.discovermeteor.com/blog/javascript-for-meteor/) – KyleMit

回答

8

要在控制檯中訪問lists,您需要使用全局範圍,因爲控制檯不在文件本身的範圍內,因爲控制檯被視爲自己的文件。

隨着var你可以訪問lists文件中的任何地方。

實質上,每個文件都包含在function() {..}中。這就是爲什麼每個文件的變量不能在其外訪問的原因。

變量範圍存在的原因稍微複雜一些,但更多與第三方包/ npm模塊相關。每個包都需要有自己的範圍,不會與外部的東西發生名稱衝突。

如果您想更通常地使用它,您也可以將它放在/compatibility文件夾中。