我想在 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)/实例),你看到使用其中一种的优势(无论是在效率、可维护性等方面)?
最佳答案
好问题,
简明扼要,扩展视野。
所以它几乎完全相同,只有你的基本 View 更有意义,因为它只适用于 View 。
关于object - 在 Ember.js 中扩展 View 或使用 mixin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20754116/