Person = Ember.Object.extend({
// [..]
});
这是 的第一个定义Person
,那么为什么var
省略了该语句?
var
在其他一些地方也缺少,例如Ember.Application.Create或Ember.StateManager.Create。
伙计们,我知道var
省略时会发生什么。但似乎没有充分的理由这样做,这样只会让人们感到困惑。
Person = Ember.Object.extend({
// [..]
});
这是 的第一个定义Person
,那么为什么var
省略了该语句?
var
在其他一些地方也缺少,例如Ember.Application.Create或Ember.StateManager.Create。
伙计们,我知道var
省略时会发生什么。但似乎没有充分的理由这样做,这样只会让人们感到困惑。
它是全局声明的,因此 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
。
var
如果要在本地范围内声明变量,则仅使用关键字。声明一个变量 withoutvar
将导致该变量在全局范围内可用。这通常是通过类来完成的,因为在大多数情况下,您希望从任何地方访问它们。
这个声明,如果不是var Person
总是在全局范围内创建变量(在浏览器的情况下是窗口),所以我想这只是草率,或者可能有某种原因 Person 应该是全局的并且可以从任何地方访问。我同意@Femaref,这是一个伪“类”,因此它旨在构造实例,var person = new Person()
因此它应该可以从其他地方访问。
无论如何,污染全局命名空间总是一个坏习惯。person 类应该驻留在一些“命名空间散列”中。