2012-05-25 20 views
1

Ember.js documentation擴展Ember.Object時,爲什麼省略var語句?

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

它的Person的第一個定義,那麼,爲什麼var聲明中省略?


var也缺少其他一些地方,例如Ember.Application.CreateEmber.StateManager.Create


夥計們,我知道var被忽略會發生什麼。但似乎沒有一個好的理由去做,就像這只是讓人混淆一樣。

+0

在文檔中,它的存在不會讓讀者在開始時與「Ember.Namespace」和「Ember.Application」的概念相混淆。所以這可能是一個不好的例子。一般來說,您想要在全局可用名稱空間內聲明您的類和實例,請參閱我的答案以獲得進一步解釋。 – pangratz

回答

3

它是全局聲明的,所以Ember和Handlebars可以解析綁定。

在用於示例的視圖的情況下,它必需的,以便它可以在把手模板經由view助手被實例:

把手

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

的JavaScript

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

如果t他控制器宣佈全球可用的對象,在這種情況下,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的博客約Naming ConventionsEmber.js

+0

抱歉,遲到接受,但直到最近我才停止瞭解Ember,所以我一直等到我真正理解它。 :) –

1

如果您想在本地範圍內聲明變量,則只使用var關鍵字。聲明一個沒有var的變量將導致變量在全局範圍內可用。這通常是通過類來完成的,因爲大多數情況下您想從任何地方訪問它們。

+0

「這通常是用類來完成的。」爲什麼? –

1

這種說法,如果沒有被前面var Person總是創建(在瀏覽器的情況下,窗口)在全球範圍內的變量,所以我想這只是草率或可能有一些原因的人應該是從任何地方全局和訪問。我同意@Femaref,這是一個僞「類」,所以它意味着構建像var person = new Person()這樣的實例,因此它應該可以從其他地方訪問。

無論如何,污染全局命名空間總是一個壞習慣。 person類應該駐留在某些「名稱空間散列」中。