0

リストのリストがあるSproutcoreを使用してUIをレンダリングしようとしています。関連する各アイテムに独自のアイテムのリストがあるデータの垂直リストがあります。私がSproutcoreについて知っていることに基づいて適切であると信じているので、モデルをセットアップしました。

モデル:

App.VerticalData = SC.Record.extend({
  someField: SC.Record.attr(Boolean),
  associatedListOfData: SC.Record.toMany("App.HorizontalData", {
    inverse: "vertical",
    isMaster: YES
  })
});

App.HorizontalData = SC.Record.extend({
  someForeignKeyField: SC.Record.attr(Number),
  vertical: SC.Record.toOne("App.VerticalData", {
    inverse: "associatedListOfData",
    isMaster: NO
  }),
});

垂直リストのListItemViewにサブビューを追加し、水平リストのアイテムをレイアウトするようにサブクラスを変更しました...まあ...水平に。私が抱えている問題は、toMany()関係からデータを取得してこの水平リストにバインドできるように見える唯一の方法は、垂直リストの各項目に対して次のことを行うことです。

horizontalListView.set('content', App.store.find(SC.Query.local(App.HorizontalData, {
  conditions: 'someForeignKeyField = ' + keyValueOfVerticalItem)
})));

これは痛々しいほど、ひどく遅いです。現在の垂直リストアイテムのtoMany()フィールドの計算されたプロパティの結果を使用できないように見える理由がわかりません。誰かがここでいくつかのガイダンスを提供できますか?おそらく私は愚かな何かを逃しています。

プロパティに直接アクセスしようとすると、次のようになります。

Object
SproutCore18001994610927067697: "sc1271"
__sc_super__: Object
_bindings: Array[0]
_kvo_cacheable: true
_kvo_changeLevel: 0
_kvo_changes: null
_kvo_cloned: Object
_kvo_content_observed_keys: Object
_kvo_dependents: Object
_kvo_revision: 2
_object_toString: "SC.ManyArray:sc1271"
_observableInited: true
_observers: Array[0]
_prevStoreIds: Array[167]
_properties: Array[15]
_records: null
bindings: Array[0]
manyAttribute: Object
outlets: Array[0]
propertyName: "associatedListOfData"
propertyRevision: 2
record: Object
recordType: App.HorizontalData
__proto__: Object

これが正しいかどうかはわかりません。そのため、テストデータに使用したフィクスチャでまだ適切に定義されていないものがある可能性があります。associcatedListOfDataフィールドに入力した情報は、Horizo​​ntalDataテーブルの要素のGUIDに合わせた数値の配列です。

4

2 に答える 2

0

レコード定義に何か問題があるのではないかと思います。リストビューを少し忘れて、コンソールを開くだけの場合は、App.VerticalDataレコードを取得して、それが何であるかを尋ねることができますassociatedListOfDataか?

例:

var vertical_id = 1;
var vertical = App.store.find('App.VerticalData', vertical_id);

console.log(vertical.get('associatedListOfData'));

それが正しく印刷されない場合は、ビューではなく、レコード自体に問題があることがわかります。

ここで少し推測する必要がありますが、レコードを作成するときにキーを指定していないので、SCは単に2つを結び付けることができないに違いありません。データベースキーがassociatedListOfDataverticalでない限り、機能しない可能性があります。

それでも問題が解決しない場合は、コードを更新して、実際にどのように記述されているかを示し、サーバーが送信するJSONを表示できるでしょうか。

于 2012-08-22T21:56:03.743 に答える
0

さらにテストと実験を行った結果、この問題は、関連するレコードの値が含まれていないApp.store.dataHashesに関連している可能性があると思います。これは、アソシエーションがレコードを調整するために手動で入力する必要があるようであり、SC.ManyArrayがアソシエーションで構築されるたびにストアに自動的に入力されることはありません。これがSproutcoreのバグなのか、それとも意図された動作なのかはわかりません。

FIXTURE用に生成したすべてのレコードを返すApp.Horizo​​ntalDataテーブルのクエリを使用してこのプロパティを設定することで、問題を解決できました。ストアにハッシュデータが利用可能な場合、ListViewのコンテンツとして返されたSC.ManyArrayを使用すると、期待どおりに機能しました。

于 2012-08-23T19:29:03.480 に答える