gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:40:31 25 4
gpt4 key购买 nike

我正在尝试实现 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com