1

Ember.js 文档

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

这是 的第一个定义Person,那么为什么var省略了该语句?


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


伙计们,我知道var省略时会发生什么。但似乎没有充分的理由这样做,这样只会让人们感到困惑。

4

3 回答 3

3

它是全局声明的,因此 Ember 和 Handlebars 可以解析绑定。

例如,在视图的情况下,它是必要的,因此可以通过view帮助程序在 Handlebars 模板中实例化:

车把

<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如果要在本地范围内声明变量,则仅使用关键字。声明一个变量 withoutvar将导致该变量在全局范围内可用。这通常是通过类来完成的,因为在大多数情况下,您希望从任何地方访问它们。

于 2012-05-25T19:49:27.063 回答
1

这个声明,如果不是var Person总是在全局范围内创建变量(在浏览器的情况下是窗口),所以我想这只是草率,或者可能有某种原因 Person 应该是全局的并且可以从任何地方访问。我同意@Femaref,这是一个伪“类”,因此它旨在构造实例,var person = new Person()因此它应该可以从其他地方访问。

无论如何,污染全局命名空间总是一个坏习惯。person 类应该驻留在一些“命名空间散列”中。

于 2012-05-25T19:49:40.477 回答