3

lists以下に示すように変数を定義listsしてコンソールに入力すると、エラーが発生しますReferenceError: lists is not defined

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');

質問:スコープをグローバルにする必要があるのはなぜですか?

4

1 に答える 1

8

コンソールにアクセスlistsするには、コンソールが独自のファイルと見なされるため、コンソールがファイル自体のスコープ外にあるため、グローバル スコープを使用する必要があります。

ファイルのどこにでもアクセスvarできます。lists

基本的に、各ファイルはfunction() {..}. これが、各ファイルの変数に外部からアクセスできない理由です。

変数のスコープが存在する理由は少し複雑ですが、サードパーティのパッケージ/npm モジュールに関連しています。各パッケージには、外部のものと名前が衝突しない独自のスコープが必要です。

より普通に使用できるようにしたい場合は、/compatibilityフォルダに入れることもできます。

于 2013-07-22T13:06:24.817 に答える