ember.js扩展和创建之间有什么区别?

Pav*_* S. 27 ember.js

ember.jsObject方法extendcreate?之间有什么区别?

TLDR:您将在Ember指南中找到答案:类和实例.

有时候我会在示例中看到一个,有时候看到另一个.特别是,Em.Application.extend({})和之间有什么区别Em.Application.create({})

如果我这样申报我的应用程序,这是什么意思?

Ember.Application.create({
    MyController : Ember.ArrayController.extend({

    }),
});
Run Code Online (Sandbox Code Playgroud)

如何访问MyController的实例?我需要以某种方式创建它吗?我需要将一些数据推入其中.

pjm*_*rse 31

死的简单答案是extend定义一个新的JS类,它继承自您正在扩展的类,但不创建该类的实例.create创建一个类的实例.

Em.Application是一种特殊情况,因为您正在创建命名空间,而不是对象实例.我不知道你什么时候想要extend Em.Application.

App = Em.Application.create(); // I have a new Em.Application namespace
App.A = Em.Object.extend(); // I have defined a new class, App.A, 
                            // which inherits from Em.Object
var a = App.A.create();  // a now contains an instance of App.A.

我建议你也阅读" 命名约定 ".

ETA:和" 理解Ember对象 "一样,正如zaplitny的评论中所建议的那样.

  • 我知道了.这是一个我不熟悉的新模式(声明`window.App = Em.Application.create`).他们在实例化时扩展Ember.Application而不是子类化(sub-namespacing?)然后实例化; 我之前使用的模式隐藏了工具链中的实例化. (2认同)