問題タブ [backbone-events]
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.jsでビューをレンダリングした後にイベントをトリガーするにはどうすればよいですか?
テンプレートを操作するビューがたくさんあります。ビューを使用したレンダリングは完全に機能します。ルーターに、すべてのビューがレンダリングされたときにイベントをトリガーする方法を探しています。LAB.jsのようなjsローダーを使用しましたが、何も機能しません!
すべてレンダリングされた後、私はイベントをfirebugコンソールに入力し、それは機能します!
すべてのビューがレンダリングされたときにトリガーされるように、イベントを配置する方法と方法を教えてください。
**私のイベント:**
**ルーター:**
ありがとうございました
更新: 同じ問題
javascript - Backbone.js モデリング
私は backbone.js を初めて使用し、何かを理解しようとしています。現在、次のオブジェクトがあります:
TodoItem モデル
TodoItemView ビュー
TodoCollection コレクション
TodoItems の束を TodoCollection に追加します。これにより、それぞれに TodoItemViews が作成されます。これにより、todo アイテムの基本的なリストがレンダリングされます。ここで、todo アイテムをクリックすると、その todo アイテムのすべてのデータがフォーム (つまり、編集可能) と [保存] ボタンで表示される新しいタブが開きます。
これをモデル化する方法を見つけようとしています.. TodoItemView に次のクリックイベントがある場合:
- タブを開いてすべての情報を入力し、その新しいタブからのイベントをそのタブ内の関数に何らかの方法でバインドしますか? (ほぼ確実に間違っています)
- レンダリングが新しいタブを開く新しい EditableTodoItemView を作成し、TodoItemView をクリックして新しい EditableTodoItemView を作成し、それを忘れます (より良いと思います)。
EditableTodoItemView は元のモデルを参照する必要がある、つまり、TodoItem は EditableTodoItemView と TodoItemView の間で共有される必要があると想定しています。新しいコレクションを作成する必要はありません。ユーザーが保存を押すと、EditableTodoItemView は backbone.sync() を呼び出します。
同様に、新しい TodoItem を作成するときに、それを TodoCollection にプッシュすると、その TodoItemView が作成され、項目が新しい (つまり、既定のデータがある) 場合は、EditableTodoItemView が自動的に作成される可能性があります。
これは理にかなっていますか?他に考えるべきことはありますか?
backbone.js - ビューのメソッドが呼び出されたときに、コレクション内のメソッドを呼び出す
次のようなビューとコレクションがあります。
ビューのメソッド toBasket() が呼び出された後に、コレクションのメソッド toBasket() が呼び出されるようにします。この目的のために、コレクションで次のことを行います。
したがって、これが機能した場合、JavaScript コンソールに次の 2 つのメッセージが表示されます。
- 見る
- コレクション
(順不同かも)
しかし、コンソールには「表示」メッセージしか表示されません。私は何を間違っていますか?
ティア!
javascript - Backbone を使用してビューのウィンドウにサイズ変更イベントを追加するにはどうすればよいですか?
バックボーン ビューの 1 つでサイズ変更イベントにハンドラーをアタッチしようとしています。いくつかの調査を行った後、ビューの要素またはその子孫にのみイベントを添付できることがわかりました。
私が達成しようとしている視覚効果は純粋な CSS では不可能であり、ウィンドウからヘッダー要素を引いたものに基づいてコンテンツ領域要素の寸法を設定するためにいくつかの JS が必要になるため、これは私にとって問題です。
私がやろうとしていることを視覚化するのに苦労している場合は、薄いヘッダーとコンテンツ領域が残りのスペースを占める必要があり、CSS の背景の策略がないことを想像してください。
javascript - コレクションを構築した後に関数を実行する backbone.js を取得しますか?
ここで何かが完全に欠落している可能性がありますが、次のものがあります。
- 「すべて」のデータをカプセル化するモデル (1 つの URL からロードされたすべての JSON)
- モデルには、構築時に取得したデータでインスタンス化する 1 つ (または複数) のコレクションがあります
- データが初期化されてロードされたときにコレクションで実行したいコード
私の質問は、構成されたコレクションについてです。コレクションの範囲外でこれを行うこともできますが、むしろカプセル化したいと思います(そうでなければ、イニシャライザなどを使用して「クラス」にするポイントは何ですか)。
そのコードを関数に入れることができると思って
initialize()
いましたが、それはモデルが設定される前に実行されるため、コレクションを構成するモデルにアクセスできません (this.models
は空です)。次に、イベントにバインドできると思いましたが、初期化後にイベントがトリガーされません。Collection を独自のエンドポイントからロードした場合はそうなるでしょうが、
fetch
私はそうしていません。既存のデータからコレクションを初期化しています。
私の質問:データで初期化された直後にコレクションで実行する初期化コードを取得する方法 (つまりthis.models
、空ではありません)。
「外部」コードを使用せずにこれを行うことは可能ですか?
これがデモコードです。おそらくこれでよりよく説明できます。
javascript - Html Element Style の変更をリッスンする方法はありますか - Backbone.JS
次の HTML テンプレートがあります。
表示はdisplay: none
物display: block
によっては1/2です。
このビューが欲しいです:
表示するときchange:display
は、el スタイルの表示プロパティの変更をリッスンすることを意味します。
それは可能ですか?
javascript - バックボーンJSイベント関数はオブジェクトを変更します
私はBackboneJSを使用してかなり複雑なアプリケーションに取り組んでいます。イベントのパブリッシュ/サブスクライブに使用するGlobalsオブジェクトがあります。課題は、イベント駆動型アーキテクチャを使用して機能を分離する効率的な手段がないように思われることです。
Magentoのような総合馬術システムについてもっと考えています。ご覧のとおり、Magentoでは、を呼び出しdispatchEvent
てオブジェクトを渡します。Magentoの次の行(壊れている、つまり、そのイベントのすべてのサブスクライバーが最初に実行されるのを待っている)で、これらのオブジェクトに再度アクセスできます。この方法の良い点は、イベントをサブスクライブするすべての関数に、変更可能なオブジェクトが渡され、そのオブジェクトが返されることです。
したがって、サブスクライバーが実行を終了したら、この変更されたオブジェクトを取得して実行を終了できます。JSでは、それはコールバックになりますが、考え方は同じです。
だから私の質問:
- このようにバックボーンに焼き付けられたものを知っていますか?
- あなたが知っているプラグインはありますか?
お時間をいただきありがとうございます!
backbone.js - バックボーンフォームをイベントにリンクするにはどうすればよいですか?
バックボーンフォームライブラリを使用して、Backboneで簡単なログインフォームを実装しようとしています。
私のHTMLにはid='formHook'のdivがあり、ページにはログインボタンのあるフォームが表示されます。しかし、ボタンを押しても何も起こりません。
私はここで何が間違っているのですか?
javascript - バックボーンコレクションのフェッチコールバックのバインドを解除するにはどうすればよいですか?
初期化関数でフェッチされたコレクションを持つビューがあるが、フェッチが戻る前にビューをクリーンアップする必要がある場合、成功コールバックやエラーコールバックのバインドを解除するにはどうすればよいですか?
したがって、次のようなコードを使用します。
myView.close()を呼び出してクリーンアップし(この場合は別のビューを表示するため)、後で(ビュー "cleanup"の後で)successCallbackを呼び出したくない場合。
私はもう試した:
ただし、コレクションには、フェッチ後に_callbacks内部変数にこのイベントがリストされていないようです。そのため、unbindは役に立たないようです。
javascript - バックボーンルーターのコールバックで選択したアイテムを強調表示する
アプリケーションレイアウト
多くのアイテムを保持するサイドバーと、これらのアイテムを表示するメインdivを備えたアプリケーションがあります。シンプルなBackbone.Router
、aItemsCollection
とItem
モデルもあります。SidebarView
サイドバー用と選択したアイテムを表示するためのがありますShowView
。
起動時に、とを初期化しSidebarView
ますMainRouter
。は、そのメソッドをイベントにSidebarView
アタッチします。また、イベントをに添付してから、をフェッチします。render
ItemCollection#all
ItemCollection#refresh
Backbone.history.start()
ItemCollection
問題
現在選択されているアイテムを強調表示したい。route.show
これは、ルーターからのイベントをバインドすることで機能します。
アプリの読み込み時にアイテムを選択すると、完全に機能します。ただし、ページがURLとして読み込まれると#/show/123
、アイテムは強調表示されません。highlight_item
デバッガーを実行したところ、コールバックが呼び出されたときにサイドバーがまだレンダリングされていないことがわかりました。
可能な解決策
Item#refresh
イベントが最初に呼び出されSidebarView#render
てからルーティングを開始するように、バインディングを並べ替える方法はありますか?
たぶん、window.router
(バックボーンドキュメントでメソッドが見つかりませんでした)から現在のルートを取得し、レンダリング時にアイテムを強調表示する回避策はありますか?
それとも、私の初期化はばかげているだけで、別の方法で処理する必要がありますか?