問題タブ [backbone-relational]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - Backbone-relational.js + Backbone.View(s)
質問:ドキュメントは不足しており、私は初心者のようなものです。Backbone.Views を (backbone-relational.js から) Backbone.RelationalModel のインスタンスにバインドする適切な (あると仮定して) 方法を誰かが確認できますか? DOMへの更新/レンダリング? バックボーンの通常のモデル/ビュー バインディングに基づいて、いくつかの異なるアプローチを試しましたが、ほとんど成功しませんでした。
裏話 (/詳細): 私は Backbone.js でロープを学んでおり、この 1 週間で多くのことを学ばなければなりませんでした。明らかな何かが不足している場合 (これは非常に可能性が高いです - 以下の問題を処理する「正しい」方法を含む)、私に連絡してください。
私は、ネストされた辞書を大いに活用するmongodb-backed RESTインターフェース(完全に制御できない-またはサーバー側で動作を再構築する)を扱っているので、バックボーンでそれを最もよく表現する方法を読んでください(バックボーンが提供する優れたsave()+サーバー同期のものを壊さないでください)。
backbone-relationalとligament.jsの2 つのオプションを見てきました。
私は backbone-relational.js から始めて、REST インターフェースによって返されるツリー内のさまざまな辞書用に作成された RelationalModels (Backbone の標準モデルに代わる backbone-relational のモデル) を持っています。それらの間の関係が定義されており、各モデルからの JSON を (それぞれの初期化関数で) ログに記録するコンソールは、全体的なコレクション レベルで fetch() コマンドでサーバーからすべてが正しく呼び出され、読み込まれていることを示しています。
それで、それはすべて素晴らしいです。
問題: 私は、これらの各モデル (および dom でテンプレートをレンダリングする必要があるバインドされた関数) の更新を「リッスン」しているビューを持っています。メイン ビューは fetch() で起動します。問題ありません。「トップ レベル」モデルをロードして dom にレンダリングしますが、その「トップ レベル」モデル内の「外部キー」モデルを表すビューは決して実行しません (上記の各モデルのコンソール ログによって証明されるように、データは確実に各モデルに読み込まれます)。
どんな洞察も非常に高く評価されます。
以下の Raynos の返信への直接の応答 (Raynos に感謝します!): サーバー上の (UpperLevelCollection url)/(UpperLevelModel id) に存在する UpperLevelModels を使用して、UpperLevelCollection のベース URL を定義した場合、これらの LowerLevelCollections を辞書キーにマップするにはどうすればよいですか?サーバー側からの各 UpperLevelModel の 1 つの JSON ダンプ? 言い換えれば、モデル内でコレクションを使用すると、このようにサーバーからのデータ ダンプを適切に処理し (明らかに非常に単純化されていますが、問題が発生します)、適切に保存/更新/同期することができますか?
javascript - Backbone-relational を使用して Backbone でネストされたモデルを作成する
backbone.jsアプリケーションでモデルをネストするためにbackbone-relationalを使用したいと考えています。
ドキュメントの例に従って、ネストされたオブジェクト (1 対多の関係など) を作成することができました。ただし、上位レベルのオブジェクトを更新する方法で下位レベルの要素をバインドする方法がわかりません。実用的なアプリケーションは非常に役立つチュートリアルになると思います。
だから私の質問は次のとおりです。次のように使用してTodos チュートリアルを拡張するにはどうすればよいですかbackbone-relational
。
- 各アイテムのサブアイテムを追加/削除できます
- サブアイテムをダブルクリックすると、それが編集されます (元の Todo の例と同様)
- 項目をクリックすると、そのサブ項目が非表示/表示されます
- サブアイテムは個別に取得されるのではなく、単純に Todo アイテムの配列属性です
更新:この質問のために jsfiddle を作成しました。これまでのところ、私は持っています:
- 上記の Todo の例をインポートしました
TodoSubitem
モデルとTodoSubitemList
コレクションを作成しました- の代わりに
Todo
拡張するようにモデルを変更しました。RelationalModel
Model
HasMany
TodoSubitem
subitem-template
html コードにa を追加しました
しかし、私はまだ方法がわかりません:
- div
subitems
をクリックしたときにのみ表示される入力フィールドを追加しますTodo
Todo
オブジェクトの属性としてサブアイテム データを持ちますがTodoSubitemView
、それらに DOM 要素をバインドします (<li>
タグなど)。
javascript - ビューをモデル内に配置するのは悪い動作ですか? (バックボーン.js)
こんにちは、私は内部と内部にモデルを持つモデルを持っています...私はそれらすべてを表示し、ヒエラルキーでそれらに到達する必要があります。
すべてのモデルにはビューがあり、たとえば、B モデルが呼び出された関数をレンダリングする場合、両方の C モデルのレンダリング関数を呼び出す必要があると考えてください。
そこで、初期化メソッドをオーバーライドして、関連するすべてのビューをモデル内に作成することにしました。
私の質問は、そのような動作は mvc アーキテクチャにとって悪いことですか? それとも自然ですか?
javascript - バックボーン リレーショナル遅延読み込み
投稿とそのコメントを操作するアプリを作成するために、RESTful JSON API で Backbone を使用しています。Backbone Relational を機能させようとしてきましたが、遅延読み込みで問題が発生しました。
関連するコメントなしで、投稿のリストを読み込みます。リスト内の投稿をクリックすると、コメントを含めた完全な投稿を取得し、これをレンダリングするビューが開きます。
2 つの Backbone.RelationModels、投稿、およびコメントがあります。コメントへの投稿関係は次のように設定します:`
今私が直面している問題は、まだコメントが含まれていないリストを取得するとすぐに関係が初期化されることです。URI でモデルを取得して、後で完全なデータをロードします。ただし、関係は再初期化されないようです。Posts.get(1).get('comments') を呼び出すと、空のコメント コレクションが返されます。
この問題に最もうまく取り組む方法を誰かが知っていますか? データはありますが、コメントのコレクションが更新されていないようです。
編集: Post モデルに change:comments をそれ自体にバインドさせて、コレクションを更新することができます。ただし、 this.get('comments') は Comments コレクションを返すため、元のコメントの JSON を取得する確実な方法を見つけることができないようです。
注: 私のコレクションでは、次のコードを使用して JSON を解析し、API で動作するようにします。
これは、API によって返される JSON が、ネイティブの JSON 配列ではなく、インデックス付きキー (連想配列) を持つオブジェクトを返すためです。
本当にありがとう!質問があれば聞いてください。どこかで漠然としていると思います。
javascript - Backbone-Relationalで関係を定義する-オプションがどちらの方向を指しているのかわからない?
Backbone-Relationalのドキュメントを理解するのにかなりの時間を費やしています。のようなものを追加する関係が100%明確ではありませんincludeInJSON
。おそらく、私が作成しようとしている構造を説明することによって、私の混乱を説明するのが最善でしょう。Venue
ネストされたモデルが0個以上あるモデルがありますAddress
(1:nの関係)。バックエンドストアはMongoDBであり、オブジェクトを埋め込むことができます。この形式で保存したいのですが:
(醜いデータ構造は無視してください。簡潔にするために調整しました。)これで、次のような関係を設定したと思いVenue
ますAddress
。
正しく理解している場合は、をキーにシリアル化されincludeInJSON
ないようにするためにfalseに設定しますが、reverseRelationでは、 –のプロパティの配列として完全な(会場プロパティなしで)シリアル化するために空白のままにします。私の望み通りに-例えば。正しい?Venue
venue
Address
includeInJSON
Address
addresses
Venue
同じように、私は結合スタイルの関係に関して同じ概念を理解しようとしています。Venue
今organisationID
フィールドがあると考えてください:
関係を好むように思われるドキュメントの例を使用すると、次のBackbone.HasMany
ように設定する必要があると思いますOrganisation
。
...上記の例にシリアル化する必要がありますか?(つまり、をVenue
取得してに挿入し、Organisation
のリストをシリアル化しません)id
organisationID
Organisation
Venues
助けてくれてありがとう-この便利なライブラリを使うのを楽しみにしています。Backbone.js用に自分のリレーショナル接着剤を書こうとして私の目をつぶった後:-)
javascript - バックボーン リレーショナル イベントが起動しない?
私は createModels をオンにしているのでthemodel.get('subModels')
、モデルのコレクションを返します。
変更されたサブモデル データを渡すと、mymodel
イベントをthemodel
投げるべきではありませんか?change
それは私にはありません。
同一のデータを渡すとさらにそうですmymodel
themodel.attributes.subModels
新しいものは何もありませんが、スローadd
とイベント。update
なぜこれらの問題が発生しているのかわかりません。助けていただければ幸いです。ありがとう!!!!
javascript - Backbone.js + リレーショナル + AMD ... リレーショナルのブートストラップ
私は何かを見失い、見落としているように感じますが、これにアプローチする方法がわかりません。また、質問する方法もよくわかりません...
まず第一に、私は AMD アプローチ (curl.js ライブラリを使用) を使用しているため、これはおそらくより困難になりますが、この問題のために AMD をあきらめていません。
「 window.bootstrap」プロパティに保存された、サーバーからのブートストラップデータのこの構造があります。
今、私はこれへのアプローチについて混乱しています。ここに私の ' DataModel/Block ' モジュールがあります:
モジュール ' DataModel/Department ' は、関係のない単純な RelationalModel です。また、ここで言及されているすべてのコレクションも、次のようなモデルへの参照以外は何もない単純なものです。
そして最後に、Bootstrap モジュールは次のようになります。
これから、それらのブロックの部門が見つかり、そこにモデルが割り当てられることを期待しますが、
...私を未定義にします。
しかし、これで終わりではありません。部門に関連するサーバーからの他のエンティティも取得します。そして、そのブートストラップから Department が自動的にアタッチされるので、透過的に使用できます。
このリレーショナル ライブラリを誤解しただけなのか、それとも AMD に対応していないのかはわかりません。どんな助けでも大歓迎です。
javascript - Backbone.js のハイライト表示が壊れ、ページに大量のデータが表示される
アプリケーションで Backbone.js を使用しています。セグメントを URL に関連付けています。したがって、セグメントには多くの URL を含めることができ、特定の URL は任意のセグメントに含めることができます。URL ペインとセグメント ペインがあります。問題はハイライト部分です。そのため、セグメントをクリックすると、そこにある URL を強調表示したいと考えています。ページに表示する URL の数を 200 に制限しました。200 を超える URL がある場合は、最初の 200 をユーザーに表示し、残りはライブ検索を使用して探している URL を見つけます。 . 問題は、URL が 200 未満で、セグメントをクリックすると強調表示が機能することです。200 を超える URL があり、ユーザーがセグメントをクリックすると、強調表示が機能しません。200 を超える URL がある場合、コレクションでスライスを使用しています。最初の 200 を強調表示するだけですが、うまくいきません。これがコードスニペットです。これを修正する方法について何か良い提案はありますか?
関数の SegmentView.js でtoggleSelection
:
javascript - アンダースコア テンプレートのヘルプが必要 - テンプレート コレクション
テンプレートにunderscore.jsを使用しています。これがサンプルテンプレートです。
backbone.js view.render() 内で、コレクションをテンプレートに渡しています。
ここでの私の質問は、ループ コードを記述する必要がありますか? コレクションを渡すだけでなく、コレクション内のアイテムごとに 1 つのアイテムをレンダリングするのに十分スマートなアンダースコアを使用することはできませんか? また、underscore.js はテンプレートをネストするためのものを提供していますか? コレクション内の各アイテムには、実際にはレンダリングする必要があるアイテムのコレクションもあります。このテンプレート内から別のテンプレートを呼び出すにはどうすればよいですか。もちろん、リンク、ヒント、チュートリアルは大歓迎です。
ありがとう!
javascript - Backbone および/または Backbone-Relational を使用して、ネストされたすべてのモデルにイベントをバインドする方法はありますか?
私は非常に頑丈な BackboneRelational を持っています - 多数のネストされたモデルとコレクションを持つモデルです。基本的に、ユーザーがこのモデルまたはそのサブモデル/コレクションについて何かを変更した場合、これを示すために UI で何かを行う必要があります。したがって、サブモデルが変更されても発生するマスター変更イベントが必要です。これを行う簡単な方法はありますか?すべてのモデルを再帰的にトラバースして変更イベントを追加する関数を作成しましたが、同じモデルへの 2 回のバインド、競合状態などの問題があります。