javascript - Ember DS.model 公开数据属性

标签 javascript ember.js

我正在尝试实现 Ember Crossfilter并且取得了一些轻微的成功,我认为我的部分痛苦是由于某些数据属性未公开。

像这样扩展 Ember.Object 时:

App.Cat = Ember.Object.extend({
  name: null,
  cuteness: null
})

并创建我可以在我的 Chrome 控制台中看到的对象,它们看起来像这样:

__ecBitwiseColour: 3
__ecBitwiseCountry: 2
__ember1389472009050: undefined
__ember1389472009050_meta: Meta
_super: undefined
cuteness: 5
get cuteness: function () {
set cuteness: function (value) {
id: 2
name: 'Boris'
get name: function () {
set name: function (value) {
__proto__: Object

但是如果我通过扩展 DS.Model 来实现它

App.Cat = DS.Model.extend({
  name: null,
  cuteness: null
})

我的 Chrome 控制台更像这样。

__ecBitwiseColour: 3
__ecBitwiseCountry: 2
__ember1389472306613: "ember330"
__ember1389472306613_meta: Meta
_attributes: Object
_changesToSync: Object
_data: Object
_deferredTriggers: Array[0]
_inFlightAttributes: Object
_recordArrays: Ember.OrderedSet
_relationships: Object
_super: undefined
_suspendedRelationships: false
age: undefined
get age: function () {
set age: function (value) {
container: Container
currentState: (...)
get currentState: function () {
set currentState: function (value) {
data: (...)
errors: Class
id: "2"
name: undefined
get name: function () {
set name: function (value) {
store: Class
toString: function () { return ret; }
__proto__: Object

我的所有数据都在 _data 属性下,但作为此对象的一部分,就像从 Ember.Object 扩展时一样。

我的问题是,为什么会发生这种情况,是否存在相关问题,以便我可以将我的 DS.modelsEmberCrossfilter 一起使用。

最佳答案

其实在Ember Data中属性存储在三个地方_data(保存的数据),_attributes(脏属性值),_inFlightAttributes(正在保存并将应用于 _data 的值)。

这就是为什么你应该总是使用 getter,如果你不这样做,你可能会看到不正确的数据。 getter 将依次查询 _attributes_inFlightAttributes_data

之所以这样实现,是为了检查脏属性,回滚能力等。

现在 EmberCrossFilter 通过不使用 getter 来作弊,不幸的是,这是 Ember 世界的主要禁忌。计算属性不起作用,事实上,这实际上只适用于 POJO 和对象上具有属性(未计算)的对象。

我可能会 fork/PR 并将所有直接引用切换为 getter

   // Initialise the sorting using Crossfilter's `quicksort`.
    var sortAlgorithm   = crossfilter.quicksort.by(function(d) { return d[property]; });

    // Initialise the sorting using Crossfilter's `quicksort`.
    var sortAlgorithm   = crossfilter.quicksort.by(function(d) { return Em.get(d,property); });

等等

关于javascript - Ember DS.model 公开数据属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21067748/

相关文章:

javascript - 让 Angular $interval 独立于 Controller 运行

javascript - JWPlayer No suitable players found 错误与 youtube 链接

ember.js - Ember.js:controllerFor x需要

css - 变形标签干扰表格单元格布局

javascript - 如何使用 compass 在 ember-cli 中生成图像 Sprite ?

ember.js - 夹具中的嵌入记录错误 : "Cannot call method ' hasOwnProperty' of undefined

javascript - 如何使用 getAllResponseHeaders 方法创建一个 JSON 对象

javascript - setInterval淡入然后淡出纯javascript,没有jquery或css

javascript - 视频请求中缺少范围 header ?

javascript - 在 Ember 中捕获 iframe 加载事件