問題タブ [marionette]
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 - イベントはゾンビインスタンスにバインドされたままになります
私はゾンビのリファレンスケースのように見えるものに直面しています。
まず、これは私が使用しているコードです。
ここに私のユーザーの詳細マネージャーのレイアウトの要点があります
代わりに、コントローラーはここにあります
操作の流れは次のとおりです。
- 管理者は、コントローラーで「manageUsers」を呼び出すルートにアクセスすると、ユーザーのリストにアクセスします。
- 管理者がユーザー行をクリックすると、イベント「users:selected」がトリガーされ、リスナーは操作するユーザーインスタンスを受け取ります。
- DetailsLayoutは、アプリケーションのメインレイアウトでインスタンス化およびレンダリングされます。特にその「コンテンツ」領域で。
- ユーザー詳細フォームを処理するビューもインスタンス化され、DetailsLayoutの「dettagli」領域内にレンダリングされます。
- この時点で、管理者はこのユーザーのメモの管理に関心があります。そこで、彼は「notes」というラベルの付いたタブをクリックすると、notesLayoutの「note」領域にメモのリストが表示されます。
- 管理者が操作したいメモをクリックすると、イベント「notes:selected」が発生し、メモインスタンスが適切なイベントハンドラー(DetailsLayout.showNote)に渡されます。
この時点で、管理者がDetailsLayout.showUsersを起動するリンクをクリックすると、前述のコントローラーによってリッスンされたイベント「users:index」が起動され、上記のリストのポイント1に戻ります。
ポイント5までプロセス全体を繰り返すと期待どおりに機能しますが、管理者が作業するメモを選択するとすぐに、デバッガーは、DetailsLayout領域の「メモ」が定義されていないというエラーを表示します。
コードを段階的に実行すると、2回目の実行で、発生したイベントが、最初のパスで使用されたインスタンスにまだバインドされているポイント6を除いて、DetailsLayoutの適切なインスタンスに正しくバインドされていることがわかりました。
上記のコードは、ユーザーの詳細が表示されるたびに、DetailsLayoutの新しいインスタンスが作成されることを示しています。これは、ゾンビがまだいないことを保証するのに十分ではありませんか?バックボーン.marionetteのドキュメントから正しく思い出すと、layout.region.show()がヒットするたびに、前のビュー(イベントのバインド解除とその他すべて)が閉じられ、新しく渡されたビューがアタッチされます。
私が間違ったやり方をしているのは何ですか?
よろしくお願いします。よろしく
PS
Backbone.marionetteのバージョンは0.8.4です
Backbonejsのバージョンは0.9.2です
jquery - バックボーンマリオネットCompositeView「イベントゾンビ」
BackboneMarionetteCompositeViewを使用して作成された非常に単純なテーブルがあります。このテーブルの唯一の要件は、データを表示し、ユーザーがヘッダー行をクリックしてデータを並べ替えることができることです。テーブルが並べ替えられると、ヘッダー列の並べ替えに使用される列にクラスのタグが付けられ、CSSを使用して矢印を表示できるようになります(例:'class = "sort asc"')。
問題は次のとおりです。ヘッダー行がクリックされると、(event.targetを介して)コールバックに渡される要素は、DOM上にあるテーブルの一部ではありません。代わりに、Chromeのデバッグツールを使用すると、ターゲット要素は実際にはテンプレートスクリプトブロックの一部であり、ユーザーが実際に表示する要素ではないように見えます。
私が今持っている最善の回避策は、テンプレート内のクローンから一意の情報を取得することによって、実際にDOMにアタッチされている要素を検索することです。
複合ビューコード(Derick BaileyのサンプルFiddleの1つから借用)は次のとおりです。
テンプレートも単純です。
問題を実証するために修正されたDerekの元のデモFiddleのフォークはここで見つけることができます:http: //jsfiddle.net/ccamarat/9stvM/14/
少し曲がりくねっています。私の質問は、ある種のゾンビビューを生み出したようです。これはjQuery/Backbone / Underscoreのバグですか、それとも単にこれをすべて間違っているのでしょうか?
**編集**これは、2つの要素の異なる親階層を示すコンソール出力です。
backbone.js - CollectionView で DOM 依存のビューをレンダリングするにはどうすればよいですか?
Marionette.CollectionView
のリストをレンダリングする がありますItemView
。render()
では、ItemView を使用してRaphaelmodel
を使用して SVG を描画します。
Raphael では、キャンバスの高さと幅を指定する必要があり、通常は から取得しthis.$el
ます。ただし、$el
(空の として) には、DOM に追加され、CSS ルールが適用されるまでディメンションがないため、ビューが DOM にあることがわかる<div>
までレンダリングを遅らせる必要があります。
問題はMarionette.CollectionView
、子ビューがレンダリングされるまで DOM に追加されないことです。の半分を再実装せずに、この動作をオーバーライドするにはどうすればよいCollectionView
ですか?
サンプルコード
jquery-mobile - jQuery Mobile とマリオネットまたはチャップリン?
過去に Backbone を使用していくつかの Web ベースのアプリケーションを作成しましたが、今は Backbone.js と jQuery Mobile を使用して新しいモバイル アプリケーションを作成しています。MarionetteまたはChaplinを使用して、より優れた構造、ビュー管理、およびメモリ管理を提供することを検討しています。最終的に、これは PhoneGap を使用してまとめられ、エンタープライズ アプリにデプロイされます。
ただし、これらのいずれかが jQuery Mobile でうまく機能する (または機能しない) ことを示すものは何も見つからないようです。それらを最大限に活用するには、jQuery Mobile を無効にする必要があることはわかっていますが、これで問題ありません。また、 require.js と JQM がうまく連携しないという問題に関する質問もいくつか見ました。では、これらのバックボーン フレームワークのいずれかを使用して、JQM とうまく連携する方法でモバイル サイトを開発するのが簡単かどうか知っている人はいますか? または、JQM で使用するために特別に設計された別のバックボーン ベースのフレームワークがありますか?
backbone.js - 別のビューが表示されているときに、RegionManagerでビューを非表示にする
私はマリオネットリージョンマネージャーを使用してビューを管理しています。3つのメインリージョンがあります:1]トップメニューリージョン2]サイドバーリージョン3]メインリージョン(変化し続ける実際のページ)
トップメニューとサイドバーのアクションに応じて、を使用してメインリージョンでレンダリングされるビューを変更し続けますApp.MainRegion.show(view)
。
persistView
ここで、タブ/ブラウザを閉じない限り、一度レンダリングされたビューを閉じてはならない特定のビュー()が1つあります。
当然、次のApp.MainRegion.show(view)
理由でここを使用することはできません。
show(persistView)
初めて呼び出されたときは、すべて問題ありません。- 私が離れてナビゲートすると、の
show(otherview)
呼び出しclose()
になりpersistView
ます。これは必須ではありません。
私の現在の解決策は次のとおりです。
persistRegion
のすぐ下にという新しいリージョンがありますmainRegion
。persistView
常にでレンダリングされますpersistRegion
。- ので
onShow()
、persistView
私はを非表示にしmainRegion
て表示しますperistRegion
上記は機能しますが、私は非常にハックだと思います。また、ステップ3]の後で、ユーザーが他のビューに移動すると、スタックします。今、私はpersistView
それがそれ自体を隠して表示する必要があることをどのように伝えるのmainRegion
ですか?
どんな助けでも大歓迎です。
backbone.js - backbone.marionette を使用した外部テンプレート
Backbone.View を使用して、この方法で外部テンプレートを取得していました (1)
Backbone.Marionette.Layout を使用して外部ファイルからテンプレートを取得したい場合はどうすればよいですか? (2)
(1)
(2)
backbone.js - アイテムビューを使用したダーティフィールド
バックボーンマリオネットで構築しているマスター/詳細アプリケーションがあります。ユーザーがマスター行をクリックすると、詳細に行の詳細が表示されます。
ユーザーが行を編集できる必要があります。保存する前に行を「離れ」ようとした場合に通知してもらいたいです。この機能にはdirtyFieldsプラグインを使用することを考えていました。
他の誰かがこれらを一緒に使用しましたか? itemview を交換するとき、プラグインを初期化するにはどうすればよいですか? ビューを閉じるときに、ビューをクリーンアップするために考えるべきことはありますか?
任意の考えをいただければ幸いです。
どうも
javascript - バックボーン モデル フェッチにデータ オプションを追加すると、コールバックがトリガーされないのはなぜですか
バックボーンで直接モデルを使用して単純なフェッチを行っています。
これは完全に機能します。
ただし、リクエストでパラメーターを送信したいのですが、これを行うと機能しなくなりますか? エラーは報告されていませんか?
誰でも助けることができますか?リクエストはサーバーから完全に行き来するように見えますか?
backbone.js - Web アプリをブートストラップするにはどうすればよいですか?
Backbone.Marionette
、Backbone.Router
およびを使用して Web アプリをブートストラップする最良の方法を探していRequirejs
ます。
次の実装は機能しますが、これが正しい方法であるかどうかを知りたいです。
これが私のコードの一部です(*)。
私の質問は:
1) 次のデータ フロー ( index.html
-> conf.js
-> router.js
-> ) は正しいapp.js
ですか?
2) Backbone.View
for each region ( header
, sidebar
.....) は、コンテキストに応じて、またはブースでインスタンス化する必要がありrouter.js
ますapp.js
か?