在Ember RESTAdapter中存储持久变量的正确方法是什么

时间:2016-08-04 00:44:25

标签: javascript ember.js

有时,只要页面未重新加载,您就需要一个持久的变量。由于许多Ember约定都在扩展对象,因此我不确定将私有变量放在何处以便可以从公共函数访问它们。

将它放在extend() ed对象中似乎是显而易见的,但是变量不能从同一个对象中的函数内到达,可能是因为Ember没有{{1}函数的父对象。

以下是我如何存储数组的示例,以便我可以扣除我的bind()是否应重新加载之前请求的记录:

RESTAdapter

此处的相关代码为shouldReloadRecord: function(store, snapArray) { window.recordHashStore = window.recordHashStore || []; let recordHash = `${snapArray.modelName}/${snapArray.id}?include=${snapArray.include}`; if (!~window.recordHashStore.indexOf(recordHash)) { window.recordHashStore.push(recordHash); console.log('Reloading', snapArray.type); return true; } else { console.log('NOT reloading', snapArray.type); return false; } } 。这完全符合我的要求,但它看起来并不像Ember' y。使用window.recordHashStore = window.recordHashStore || []全局范围也不好。我在哪里可以在应用程序的持续时间内在浏览器中存储私有变量,以便它可用并且不会在转换时被覆盖?

1 个答案:

答案 0 :(得分:4)

这听起来像Ember.Service的一个很好的用例。服务本质上是一个单独的服务,但它并未在您的window /全局范围内公开。它也不受路由转换的影响(除非您有在路由转换时操作服务的代码)。

您可以将服务注入RESTAdapter,并将状态存储在服务中。