gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:59:14 25 4
gpt4 key购买 nike

我想在 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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com