具有存储访问权限的模型的类方法

Class methods for models with access to store

本文关键字:模型 类方法 权限 访问权 存储 访问      更新时间:2023-09-26

我已经和这个问题斗争了一段时间。

在我的Ember应用程序(使用Ember-cli)中,我有一个模型,我想为它附加一些类方法。

我希望能够从我的控制器Model.allWithIssues调用,以查找所有已注册问题的模型实例。

为了实现这一点,我添加了一个使用以下代码的方法:

Model.reopenClass({
    allWithIssues: function () { ... }
})

我的问题是,我无法从模型内部访问数据存储。

我尝试了很多不同的方式来注入商店:主要是为了模型,但没有成功。这里的一个答案甚至声称没有办法注入到模型中,而其他人则提出了在根本不起作用的模型中实现DI的方法。

我的做法完全错了吗?我应该把这个逻辑放在一个单独的类中吗?

编辑:

我想到的解决方案是:

  • 制作一个包含此方法的通用控制器,并让所有需要此方法的控制器对其进行扩展

  • 中的某种混合

  • 制作一个"存储库"类,作为控制器和存储之间的抽象层。

我仍然不确定哪条路线是最好的,但对于这样简单的事情来说,所有这些似乎都太稳健了。

控制器也不是合适的位置,除非您加载了所有模型,并且您所做的是一个计算属性。

路由器中的模型挂钩将是一个更好的地方,它将承担适配器的职责,以loa数据、反序列化数据,并为您提供模型实例。

或者,您可以创建一个位于/lib文件夹中的服务,将其注册到CI,并将存储注入其中。这取决于您的用例。