在组件中加载模型

Loading models in Component

我制作了一个组件,它生成一个下拉列表,用于 select 根据传入的类型从可能的项目列表中选择一个项目:

{{item-selector type="type1"}}

我不想在页面加载时加载这些项目,因为它们可能有很多,而且很多时候不需要加载。我更喜欢在用户与组件交互时加载它们。这排除了在路线中加载它们的可能性。

由于组件无法访问商店,我一直在尝试为项目传递控制器:

{{item-selector type="type1" widget=controllers.type1}}

我正在使用 widget 因为我想不出更好的属性名称并且控制器已被占用。欢迎提出建议。

但现在我不确定如何在控制器中加载模型。我应该在 init 中完成吗?或者也许是一个计算属性?我不确定。

将不胜感激有关如何解决此问题的建议。

感谢双向数据绑定,您可以只传递一个空数组,它只会在需要时填充。

{{item-selector type="type1" items=items action="loadItems"}}

这里我们将项目作为列表的元素传递,列表的开头是空的。 我们还传递了一个动作,要求路由按需加载项目。

// controller.js

export default Ember.ArrayController.extend({
  items: null
});

// route.js

export default Ember.Route.extend({
  actions: {
    loadItems: function() {
      var controller = this.get('controller');

      this.store.find('item').then(items => {
        controller.set('items', items);
      });
    }
  }
});

在您的组件中的某些地方,您将触发加载项目的操作,作为您提到的用户交互的一部分。