Ember.js 没有余烬数据的余烬关系

Ember.js 没有余烬数据的余烬关系,ember.js,ember-data,relationship,Ember.js,Ember Data,Relationship,我有一个余烬应用程序,有些模型使用余烬数据,有些则不使用。我的问题涉及在这些模型之间创建关系,以及构建模型关系的最佳方法 模型 目前我有以下型号: 食物 不使用余烬数据 向外部API发出$.ajax请求 扩展Ember.Object(有关方法的示例,请参阅和) 膳食 使用余烬数据 有很多份 部分 使用余烬数据 一顿饭 有一种食物 在我的应用程序中,我需要一个部分是一个独特的记录,其中有一个权重字段。每一部分都应该从相关的食物中获得它的其他值。一顿饭应该有很多份 问题 部分本身应该

我有一个余烬应用程序,有些模型使用余烬数据,有些则不使用。我的问题涉及在这些模型之间创建关系,以及构建模型关系的最佳方法

模型 目前我有以下型号:

  • 食物
    • 不使用余烬数据
    • 向外部API发出$.ajax请求
    • 扩展
      Ember.Object
      (有关方法的示例,请参阅和)
  • 膳食
    • 使用余烬数据
    • 有很多份
  • 部分
    • 使用余烬数据
    • 一顿饭
    • 有一种食物
在我的应用程序中,我需要一个部分是一个独特的记录,其中有一个
权重
字段。每一部分都应该从相关的
食物中获得它的其他值。一顿饭应该有很多份

问题
  • 部分本身应该是一个模型吗?我们应该将它存储在某种类似数组的结构中,作为
    菜单上的字段(例如:
    部分
    )?考虑一部分不能重复使用,只能与一顿饭相关联。<李>
    
  • 如果对#1的回答是“是”,那么我的
    膳食会是什么样子
  • 由于
    食品
    不使用余烬数据,定义一份食物和一份食物之间关系的最佳技术是什么
  • 最终,用户体验应该允许用户

  • 观看食物
  • 制作一部分食物
  • 把这一部分与一顿饭联系起来
  • 查看与膳食相关的所有部分

  • 非常感谢您的帮助。

    Q1:份量本身应该是一个模型吗?我们应该将它存储在某种类似阵列的结构中,作为餐点上的字段(例如:份量)

    我不确定您是在问
    部分
    应该是模型还是
    部分
    应该是模型。但无论我怎么想,解决方案都是将
    部分
    构建为一个模型,并为
    膳食
    模型构建
    部分
    关系。因为你有创造食物的功能。在我的理解中,该部分应该在不吃一餐的情况下创建(尽管它可以在以后链接到一餐)

    Q2:如果对#1说“是”,那么我的膳食模型def会是什么样子

    模型定义如下所示:

    App.Portion = DS.Model.extend({
      weight: DS.attr(),
      meal: DS.belongsTo('meal', {async: true})
    });
    
    App.Meal = DS.Model.extend({
      portions: DS.hasMany('portion', {async: true})
    });
    
    Q3:由于食品不使用余烬数据,定义一份食物和一份食物之间关系的最佳技术是什么

    最好仍然使用余烬数据来定义
    食品
    模型,只需定义自定义适配器和序列化程序,余烬数据处理其余部分。电影和纪录片是一个很好的开始。下面是一个简单的例子

    // Just name it "FoodAdapter" and Ember Data knows to use it for "Food".
    App.FoodAdapter = DS.Adapter.extend({
      find: function(store, type, id) {
        // The returned value is passed to "serializer.extract" then "store.push"
        return this._ajax({url: '/external/food', type: 'GET'});
      },
    
      createRecord: function() {},
      updateRecord: function() {},
      deleteRecord: function() {},
      findAll: function() {},
      findQuery: function() {},
    
      _ajax: function(options) {
        // Transform jQuery promise to standard promise
        return Em.RSVP.cast($.ajax(options));
      }
    });
    
    App.FoodSerializer = DS.Serializer.extend({
      // Assume the json is:
      // {
      //   "food_data": {
      //     "name": "XXX",
      //     "price": 100
      //   }
      // }
      extract: function(store, type, payload, id, requestType) {
        return payload.food_data;
      },
    
      serialize: function() {}
    });
    

    您没有为
    食品
    模型使用余烬数据有什么特殊原因吗?这似乎有点愚蠢,因为您已经包含了它,并且希望将关系连接到它,但不想将其定义为一个余烬数据模型。我不控制API端点(它是第三方),因此我的理解是,这将阻止我使用Ember数据。如果您知道一种方法,我可以两全其美,那么这将是一个很大的帮助。Ember-Data具有的概念,允许您自定义它如何对记录执行CRUD操作。如果您可以使用
    $.ajax
    访问API,那么您可以编写一个Ember数据适配器来为您处理它。您还可以使适配器只处理一种类型的模型,而不是所有类型的模型。请看一个例子。