Ember.js 填充余烬。使用余烬数据延迟加载从从属控制器中选择

Ember.js 填充余烬。使用余烬数据延迟加载从从属控制器中选择,ember.js,ember-data,Ember.js,Ember Data,我花了大约10天的时间在一个简单的问题上,我可以用Dojo在大约10分钟内解决这个问题。我希望我错过了一些简单的东西——我是一个喜欢使用余烬的noob 我只是尝试填充一个余烬的内容。使用余烬数据从另一个控制器选择数据。考虑这样的情况:能够选择食物成分作为原料。 显然,在RawIngredientController和FoodGroupsController之间使用“需要”依赖项,并对内容进行绑定 这是我离成功最近的一次,我觉得这还不够——我会解释的 <script type="text/x

我花了大约10天的时间在一个简单的问题上,我可以用Dojo在大约10分钟内解决这个问题。我希望我错过了一些简单的东西——我是一个喜欢使用余烬的noob

我只是尝试填充一个余烬的内容。使用余烬数据从另一个控制器选择数据。考虑这样的情况:能够选择食物成分作为原料。

显然,在RawIngredientController和FoodGroupsController之间使用“需要”依赖项,并对内容进行绑定

这是我离成功最近的一次,我觉得这还不够——我会解释的

<script type="text/x-handlebars" data-template-name="rawIngredients">

     {{#each item in controller itemController="rawIngredient" }}

            {{! view Ember.Select
                    contentBinding="controllers.foodGroups.content"
                    optionValuePath="content.id"
                    optionLabelPath="content.name"
                    prompt="select Food Group" }}

     {{/each}}
</script>

Cook.RawIngredientController = Ember.ObjectController.extend({
    isEditing: false,
    needs: ['foodGroups'],
    ...
});


Cook.RawIngredient = DS.Model.extend({
    name: DS.attr('string'),
    nameKey: DS.attr('string'),
    foodGroup: DS.belongsTo('Cook.FoodGroup')
});

Cook.FoodGroupsRoute = Ember.Route.extend({
  setupController: function(controller) {
     controller.set('content', Cook.FoodGroup.all());  // have also tried find()
  }
});

Cook.FoodGroup = DS.Model.extend({
    name: DS.attr('string'),
    nameKey: DS.attr('string')
});
但它错误地说“allFoodGroups”提供的是绑定而不是Ember.Array。我想我迷失在一片混乱的命名惯例中了。我可以展示我在这方面的其他尝试,但都有未定义内容的错误

啊。所以稍微往后退一点。。。至少使用我的原始解决方案和预加载FoodGroups存储应该提供一个解决方案,但是我似乎无法通过编程方式让EmberData出去并加载数据。我在RawIngredientController中尝试了一个init()函数,如下所示

init: function() {
    var item = this.get('controllers.foodGroups.content.firstObject');
},
但我也没有找到正确的组合。即使我这样做了,这似乎是一个错误的方法,因为这将为每个原料成分设置一个引用,而不是使用来自原料成分(或食物组?)的单个引用-但这似乎是一个不同的主题

这是我试图用小提琴来描述这个问题


是否有人想出了一种高效、有效的方法来加载和使用其他控制器中定义的存储,使用EmberData延迟加载相关内容

您的基本问题似乎是您没有访问foodGroups路由,因此它的setupController()永远不会执行,因此选择控制器的内容永远不会设置

在您的示例中,当向相关路由添加链接并单击该链接时,路由将被初始化,绑定也会工作

我试图更新您的JSFIDLE,但它链接到了Github的“最新”版本的ember数据,该数据已经有一段时间没有更新了(在正式发布之前,您应该自己构建它),而且它还使用了旧版本的ember,所以我遇到了一些奇怪的错误

下面是一个包含最新余烬和余烬数据的版本:

请注意单击国家/地区链接时发生的情况。我留下了一些
调试器语句,可帮助您了解在调用时调用的内容



作为设计说明,您的“家长”控制器可能不应该依赖于“孩子”控制器。

谢谢,我已经从您的回答中学到了很多。我根据您的更新更新了我的小提琴:现在我正尝试在ApplicationController.init()中以编程方式调用国家路线,这样它就可以预加载,而无需单击链接。我尝试了一些方法,但没有找到正确的方法-通常我试图向路由器发送消息以调用/country,但无论发生什么,都会出现“no handler”错误。有什么想法吗?我有一个版本正在运行(方法4),更新的小提琴在这里-。不确定这是不是最好的款式,但在我看来很合理。
init: function() {
    var item = this.get('controllers.foodGroups.content.firstObject');
},