最近、これは私のアプリケーションのバグとなりましたが、何が変わったのか分かりません(私は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
)。下線付きのプロパティにアクセスするのはコードの臭いですか?もしそうなら、どのようにしてモデル上のその単一レコードからデータだけを得ることができますか?
そんなことはありますか?私は 'recordsBySelectedShapeAndColor.firstObject'を試してみましたが、データオブジェクトを見ることができないクラスを返したのでどこにもいなかったので、私はまだそこにいませんでした。ありがとうございました!!! これはうまくいきません。 'recordsBySelectedShapeAndColor.get(" firstObject ")' – redOctober13
emberでは常に '.get'を使用します!これは実際の配列ではなく、Emberの 'Enumerable'です。 – Lux
ありがとう@Lux。これ(https://stackoverflow.com/questions/40606827/difference-between-ember-get-and-this-get)から、 'Ember.get()'にはこれを上回る良いユースケースがあるようです。 'get()'がEmberオブジェクトでない場合に 'this.get()'が失敗する間、あなたのオブジェクトがEmberオブジェクトかどうかわからない場合はget()を呼び出してください。 – redOctober13