object - 在 Ember.js 中扩展 View 或使用 mixin

标签 object view ember.js mixins

我想在 Ember 应用程序的多个 View 中包含标准功能。该功能包括将 View 的 tagName 和 classNames 设置为相同以及跟踪每个 View 的属性。

简而言之:我应该使用 mixin 还是扩展基本 View ?

扩展的问题...

是否应该扩展基本 View 来做到这一点?例如:

App.BaseView = Em.View.extend({
    tagName: 'section',
    classNames: ['page_section', 'blue'],
    willInsertElement: function() {
        // Some functions called here that set properties
    },
});

App.PageOneView = App.BaseView.extend({
    // View specific stuff here
});

App.PageTwoView = App.BaseView.extend({
    // View specific stuff here
});

... 或者,是否应该使用 Mixin 来扩展功能?例如:
App.BaseMixin = Em.Mixin.create({
    tagName: 'section',
    classNames: ['page_section', 'blue'],
    willInsertElement: function() {
        // Some functions called here that set properties
    },
});

App.PageOneView = Em.View.extend(App.BaseMixin, {
    // View specific stuff here
});

App.PageTwoView = Em.View.extend(App.BaseMixin, {
    // View specific stuff here
});

我知道 View 和 mixin 都是 Ember 对象,但是使用它们中的任何一个来将标准功能扩展到其他对象(例如 View )会影响对象和原型(prototype)/实例(如果它们与对象不同)的交互方式以及属性是否被设置在 View 或 View 对象的实例上?

如果上面的两个例子不同,那么在 mixin 的 init 函数上设置属性会改变什么吗?例如:
App.BaseMixin = Em.Mixin.create({
    tagName: null,
    classNames: null,
    init: function() {
        this.set('tagName', 'section');
        // And so forth...
    },
});

但是,如果使用 mixin 和扩展 View 对我尝试添加标准功能的 View 有相同的影响(也就是说,它们以相同的方式影响 View 的对象和原型(prototype)/实例),你看到使用其中一种的优势(无论是在效率、可维护性等方面)?

最佳答案

好问题,

简明扼要,扩展视野。

  • 钩子(Hook)/绑定(bind)是特定于 View 的,因此不能将 mixin 应用于 Controller 、路由等,并且根据您的团队构成,您不希望给某人机会混入不属于的代码。
  • 在 Ember 中扩展一个类只是将基类变成一个 mixin 并将其应用于您的类。 https://github.com/emberjs/ember.js/blob/v1.2.0/packages/ember-runtime/lib/system/core_object.js#L488

  • 所以它几乎完全相同,只有你的基本 View 更有意义,因为它只适用于 View 。

    关于object - 在 Ember.js 中扩展 View 或使用 mixin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20754116/

    相关文章:

    sql - T-SQL View 在一次检索中检索两个查找

    ember.js - Ember-数据 "TypeError: this.container is undefined"

    ember.js - 在 Ember 中建模双向对称关系

    ember.js - peekRecord() 不工作但 peekAll() 工作

    java - 如何使用 Java 创建 CaffeineCache 对象?

    java - 您可以在不声明新变量的情况下在 Java 中向下转换对象吗?

    ios - ARKit 保存对象位置并在下一个 session 中查看它

    Javascript:图像对象的 onerror 事件有哪些参数?如何获取与图像相关的错误的更多详细信息?

    java - 如何以编程方式使 View 在布局上居中?

    html - Dreamweaver 中的实时 View 和非实时 View 是否应该显示相同?