Ember.js 使用Ember Data 1.0.0-beta.4(以及适配器和序列化程序)在Ember应用程序之间共享模型

Ember.js 使用Ember Data 1.0.0-beta.4(以及适配器和序列化程序)在Ember应用程序之间共享模型,ember.js,ember-data,Ember.js,Ember Data,我正在创建的站点使用多个余烬应用程序来管理站点的不同区域。过去,在应用程序之间共享模型定义很容易。一个应用程序将定义模型(即App1.Product),另一个应用程序(App2)可以通过调用模型本身上的createRecord来创建它们:App1.Product.createRecord({}) 但是,对于Ember Data 1.0,所有记录都是在store对象之外创建的。因此,这不再适用于App2: App1.Product = DS.Model.extend({ name: DS.

我正在创建的站点使用多个余烬应用程序来管理站点的不同区域。过去,在应用程序之间共享模型定义很容易。一个应用程序将定义模型(即
App1.Product
),另一个应用程序(App2)可以通过调用模型本身上的createRecord来创建它们:
App1.Product.createRecord({})

但是,对于Ember Data 1.0,所有记录都是在store对象之外创建的。因此,这不再适用于App2:

App1.Product = DS.Model.extend({
    name: DS.attr('string'),
    price: DS.attr('number')
});

App2.IndexRoute = Ember.Route.extend({
  setupController: function(controller, products) {
      controller.set('products', [

          // DOESN'T WORK
          this.store.createRecord('product', {name: 'Robot', price: 10.55}),
          this.store.createRecord('product', {name: 'Blocks', price: 4.99})

      ]);
  }
});
这不起作用,因为App2没有在其命名空间上定义任何产品模型定义

现在如何在应用程序之间共享模型定义(以及序列化程序和适配器)?我目前正在做的一件事是使用一个JS文件“导入”所有共享模型:

App2.Product = App1.Product;
但是对于一长串的模型和适配器来说,这会变得单调乏味


有没有办法创建其他应用程序继承的shell Ember应用程序?(Ember.Application的实例没有扩展方法)。

我将研究如何使用类似的模块加载器。如果你对此不感兴趣,那就建立你自己的。这里有一个简单的例子

Models = {
  registerModels:function(app){
    var models = Object.keys(this),
        modelName,
        model;

    for(var i = 0; i< models.length;i++){
      modelName = models[i];
      model= this[modelName];

      if (this.hasOwnProperty(modelName) && modelName != 'registerModels'){
         app[modelName] = model;
      }
    }
  }
};

Models.Product = DS.Model.extend({
    name: DS.attr('string'),
    price: DS.attr('number')
});

Models.Color = DS.Model.extend({
    color: DS.attr()
});

Models.registerModels(App);
模型={
registerModels:函数(应用程序){
var models=Object.keys(此),
型号名称,
模型
对于(var i=0;i

我正在为此使用符号链接。就其本身而言,这个解决方案出人意料地运行良好

设置如下:我们有一个面向用户的Ember应用程序和一个仅限管理员的应用程序。它们位于同一回购协议中,分别位于
ember/
admin/

不是目录,
admin/app/models
看起来像:

models -> ../../ember/app/models/
这些链接建立起来非常便宜。只需运行:

ln -s -r path-to-link-destination
一切都按照您预期的方式运行——所有编辑都在
ember/app/models
下进行。我在用例中没有遇到任何问题。您还可以使用相同的技术链接特定组件或其他要在应用程序之间共享的文件

至于缺点——更改符号链接下的文件似乎不会触发ember cli中的重建,而且此解决方案可能无法在Windows上运行