2017-11-10 4 views
0

最近、これは私のアプリケーションのバグとなりましたが、何が変わったのか分かりません(私はEmberのバージョンをまだ1.13にアップグレードしていません)。私が知る必要があるのは、従来の方法でモデル上の単一レコードのオブジェクトにアクセスする方法です。モデル内の単一のレコードからデータオブジェクトを取得する方法は?

私は私のmodelをフィルタリングするために、次のコード他の二つの性質に基づいてあります

recordsBySelectedShapeAndColor = get(this, "model").filter(function(rec) { 
    //filter the model by the chosen shape and color 
    return (
     get(rec, "shape") === theShape && 
     get(rec, "color") === theColor 
    ); 
    }); 

私はその後、私はのためにreduce()を使用していた、これらのフィルタレコードの要約を作成する必要がありますが、そのIFフィルタを1つのレコードのみを返すには、その後、reduceは右の結果を返さないので、私は次の条件があります。

if (recordsBySelectedShapeAndColor.length < 2) { 
    summary = recordsBySelectedShapeAndColor[0]._data; 
} else { 
    summary = recordsBySelectedShapeAndColor.reduce(function(a, b) { 
... 
} 

それはもはや単純なオブジェクトを返すif内のラインですので、私は、CHでsummary = recordsBySelectedShapeAndColor[0]._internalModel._data;に預けて動作しますが、怪しいようです(._data)。下線付きのプロパティにアクセスするのはコードの臭いですか?もしそうなら、どのようにしてモデル上のその単一レコードからデータだけを得ることができますか?

答えて

1

使用get(recordsBySelectedShapeAndColor, 'firstObject')

+0

そんなことはありますか?私は 'recordsBySelectedShapeAndColor.firstObject'を試してみましたが、データオブジェクトを見ることができないクラスを返したのでどこにもいなかったので、私はまだそこにいませんでした。ありがとうございました!!! これはうまくいきません。 'recordsBySelectedShapeAndColor.get(" firstObject ")' – redOctober13

+1

emberでは常に '.get'を使用します!これは実際の配列ではなく、Emberの 'Enumerable'です。 – Lux

+1

ありがとう@Lux。これ(https://stackoverflow.com/questions/40606827/difference-between-ember-get-and-this-get)から、 'Ember.get()'にはこれを上回る良いユースケースがあるようです。 'get()'がEmberオブジェクトでない場合に 'this.get()'が失敗する間、あなたのオブジェクトがEmberオブジェクトかどうかわからない場合はget()を呼び出してください。 – redOctober13

関連する問題