首先祝您圣诞快乐,感谢您提供建议。
我的问题仍然在 emberjs 命名空间上,但这次是在一组多个 emberjs 应用程序的上下文中,这些应用程序将包含在多个 rails-engine 中,因此每个 emberjs 应用程序都是具有自己的控制器、模型、视图和路由器的独立应用程序。但是,他们仍然需要共享 ember-data 关联。这些 rails-engines 将反过来包含在 main-rails 应用程序中,其中每个引擎代表应用程序的主要功能。
在这个jsfiddle中,我想出了 3 种命名空间的方法,但我想知道哪一种是 emberjs 方法:
**Approach 1**
//每个 emberjs 应用都有自己的命名空间
MainRailsApp = Ember.Application.create();
RailsEngine = Ember.Namespace.create();
RailsEngine2 = Ember.Namespace.create();
MainRailsApp.Store= DS.Store.extend(); **inherits from Ember.Application**
MainRailsApp.Router = Em.Router.extend() **inherits from Ember.Application**
console.log(RailsEngine.toString()); //RailsEngine
console.log(RailsEngine2.toString()); //RailsEngine2
RailsEngine.Model = DS.Model.extend
RailsEngine2.model = DS.Model.extend
这个模型的共享关联是否可以从不同的命名空间继承?
Contact.Model = RailsEngine.Model.extend({
address: DS.attr('string'),
user: DS.belongsTo('User.Model')
});
User.Model = RailsEngine2.Model.extend({
name: DS.attr('string'),
contacts: DS.hasMany('Contact.Model'),
});
**Approach 2**
//所有不同的 emberjs 应用共享一个命名空间但不同的实例
Yp = Ember.Namespace.extend();
UserRailsEngine = Yp.create();
ContactRailsEngine = Yp.create();
PaymentRailsEngine = Yp.create();
Yp.Jk = Ember.Application.extend();
Yp.Jk.create();
Yp.Router = Em.Router.extend(); **inherits from the Ember.Namespace**
Yp.Store = DS.Store.extend({ }); **inherits from the Ember.Namespace**
console.log(UserRailsEngine.toString()); //UserRailsEngine
console.log(PaymentRailsEngine.toString()); //PaymentRailsEngine
UserRailsEngine.Model = DS.Model.extend
ContactRailsEngine.Model = DS.Model.extend
这个模型可以共享关联吗,它们有一个命名空间但不同的实例
Contact.Model = ContactRailsEngine.Model .extend({
address: DS.attr('string'),
user: DS.belongsTo('User.Model')
});
User.Model = UserRailsEngine.Modelextend({
name: DS.attr('string'),
contacts: DS.hasMany('Contact.Model')
});
**Approach 3**
//一个命名空间,但每个 emberjs 应用的命名空间的多个子类
Mynamespace = Ember.Namespace.extend();
Order = Mynamespace.extend();
OrderRailsEngine = Order.create();
Event = Mynamespace.extend();
EventRailsEngine = Event.create();
console.log(OrderRailsEngine.toString()); //OrderRailsEngine
console.log(EventRailsEngine.toString()); //EventRailsEngine
**Additional questions**
1. 在所有 3 种方法中,我仍然可以使用 hasMany 和 belongsTo 关联 ember-data 模型吗?
我仍然不确定如何处理路由器。您认为命名空间应该在主应用程序和每个 rails-engine 中,以便它们仍然可以无缝工作。
您对如何处理 ember-data DS.Store 命名空间的建议是什么,因为每个 ember-data 模型都将被命名为每个引擎,我仍然希望 ember-data DS.Store 能够识别和使用包含在引擎。
Ember.Namespace 是否像 Ember.Application 一样自动初始化。
欢迎替代模式。
非常感谢您的时间。