1

Ember.jsのドキュメントから:

Person = Ember.Object.extend({
   // [..]
});

の最初の定義なPersonのに、なぜvar文が省略されているのでしょうか?


varEmber.Application.CreateEmber.StateManager.Createなど、他の場所にもありません。


varみんな、 を省略するとどうなるか知っています。しかし、それを行う正当な理由はないようです。このように、人々を混乱させるだけです。

4

3 に答える 3

3

Ember と Handlebars がバインディングを解決できるように、グローバルに宣言されています。

viewたとえばビューの場合、ヘルパーを介してハンドルバー テンプレートでインスタンス化できるようにする必要があります。

ハンドルバー:

<script type="text/x-handlebars" >
    {{#view MyView}}
         my view's template
    {{/view}}
</script>

JavaScript : </p>

MyView = Ember.View.extend({});

var次の例は、コントローラーがステートメントで宣言されている場合は機能しません。 http://jsfiddle.net/pangratz666/uzsd6/を参照してください。

ハンドルバー:

<script type="text/x-handlebars" >
    {{controller.name}} - {{secondController.name}}
</script>​

JavaScript :

var controller = Ember.Object.create({
    name: 'my name'
});

var secondController = Ember.Object.create({
    nameBinding: 'controller.name'
});​

コントローラーがグローバルに使用可能なオブジェクト (Appこの場合は名前空間) で宣言されている場合、バインディングを解決できます。 http://jsfiddle.net/pangratz666/kUmje/を参照してください。

ハンドルバー:

<script type="text/x-handlebars" >
    {{App.controller.name}} - {{App.secondController.name}}
</script>​

JavaScript :

App = Ember.Application.create({});

App.controller = Ember.Object.create({
    name: 'my name'
});

App.secondController = Ember.Object.create({
    nameBinding: 'App.controller.name'
});​

の命名規則に関するEmberistのブログを参照してください。Ember.js

于 2012-05-25T20:22:32.957 に答える
1

varローカルスコープで変数を宣言する場合にのみ、キーワードを使用します。なしで変数を宣言するvarと、その変数はグローバルスコープで使用できるようになります。ほとんどの場合、どこからでもクラスにアクセスしたいので、これは通常クラスで行われます。

于 2012-05-25T19:49:27.063 に答える
1

このステートメントの前にない場合は、var Person常にグローバルスコープ(ブラウザーの場合はウィンドウ)に変数が作成されるため、これは単なる怠惰であるか、Personがグローバルでどこからでもアクセスできる必要がある理由があると思います。@Femarefに同意します。これは疑似「クラス」であるためvar person = new Person()、他の場所からアクセスできるようにインスタンスを構築することを目的としています。

とにかく、グローバル名前空間を汚染することは常に悪い習慣です。個人クラスは、「名前空間ハッシュ」に存在する必要があります。

于 2012-05-25T19:49:40.477 に答える