問題タブ [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の「this」の奇妙な動作
Backbone.jsに基づいて次の2つのビューがあります
これが私が直面している問題です。
ユーザーが2つのセクションを作成するビューがあります。たとえば、「section1」と「section2」という名前です。これらの名前は、「title」属性で使用されます。
これが私が観察している奇妙な行動です:
ユーザーが「section1」にいてアイテムを追加すると、「add」バインドイベントがトリガーされ、その結果、「section2」がコンソールに書き込まれます。
ユーザーが「section1」にいてアイテムを追加すると、「remove」バインドイベントがトリガーされ、その結果、「section1」がコンソールに書き込まれます。
ユーザーが「section2」にいてアイテムを追加すると、「add」バインドイベントがトリガーされ、その結果、「section2」がコンソールに書き込まれます。
ユーザーが「section2」にいてアイテムを追加すると、「remove」バインドイベントがトリガーされ、「section2」、次に「section1」がコンソールに書き込まれます。
「this.addItemToSection」を使用して「pg.views.Section」ビュー内に「add」をバインドしている場合、そのインスタンス内の「addItemToSection」ブロックのみを呼び出すべきではありませんか?
「this」を「再定義」しているのがわかるのは、「pg.views.ItemList」の初期化ブロックの「add」バインドだけです。その行が原因である場合、「section1」の「add」バインドで「this」が再定義されないようにするにはどうすればよいですか?
javascript - バックボーンを使用した jQuery でのクリック バインディング
私は Backbone.js を使用していますが、私のメイン ビューの 1 つで、非常に奇妙なバグに遭遇しました。
ビューは、新しい Twitter レイアウトのように見えます。オブジェクトの配列を受け取り、それぞれがコレクションを記述し、そのコレクションに作用する要素を表示します。各コレクションは、ビュー内の 1 つのタブで表されます。私のビューのrender()
メソッドは、このコレクション オブジェクトの配列を取得し、tabContainer
DOM 要素がまだ空でない場合はクリアし、タブをレンダリングしてから、それらの各タブにイベントをバインドします。
私のコードには、タブをレンダリングするメソッドと、クリック ハンドラをそれらのタブに順番にバインドするメソッドがあります。これは、初めて を実行render()
したときは正常に機能しますが、その後の の呼び出しでrender()
は、クリック ハンドラはバインドされません。関連するコード スニペットは次のとおりです。
前述したように、render()
ここでの方法は機能しますが、初回のみです。奇妙な部分は、次のスニペットのように行を移動しthis._bindTabEvents();
てメソッドの最初の行にするとopenTab()
、すべてが完全に機能することです。
もちろん、そのコード行はそのメソッドに含まれているわけではありませんが、全体が正常に機能するため、なぜそこで機能するのかを尋ねる必要がありますが、次のように順番に機能しません。
これは私には意味がありません。次の行の後に配置しても機能しません。
実行順序に関する限り、それは機能するものと本質的に同じですが。
私が間違っていることと、これを正しくするために何をすべきか(動作とコーディングスタイルの両方の観点から)誰かが知っていますか?
javascript - ソース コードを汚染することなく Javascript でログを追加する
ログステートメントをあちこちに挿入してソースコードを汚染することなく、Web アプリケーションにログ (分析用) を導入したいと考えています。アプリケーションは Javascript が重いです。Java アプリケーションでは、アスペクト指向プログラミングを使用して同様のことを行い、ベース ソース コードをクリーンなままにします。Javascriptで同様のことを達成することは可能ですか?
私が現在検討しているアプローチの 1 つは、ロギング コードを個別にロードし、関心のある特定のイベントをリッスンさせることです。backbone.js の使用を検討しているため、さまざまなイベントを発行するイベント ドリブン メカニズムが期待されます。その後、特定のイベントをリッスンしてログに記録できるようにする必要があります。
開発者が試した他のアプローチ/フレームワークについて聞きたいです。
javascript - Backbone.jsのビューを破棄または削除します
現在、ビューのdestroy / removeメソッドを実装しようとしていますが、すべてのビューで機能する一般的なソリューションを取得できません。
コントローラーにアタッチするイベントがあることを期待していたので、新しいリクエストが届くと、以前のビューが破棄されてから、新しいビューが読み込まれます。
ビューごとに削除関数を作成せずにこれを行う方法はありますか?
events - バックボーンビューのイベントリスナーがDOMのオブジェクトに追加されていません
私は最初のBackboneアプリで苦労していて、物事のコツをつかみ始めました。サーバー(NodeJS)からJSONデータをロードし、テンプレート(Handlebars)にデータを入力し、フロントエンドで比較的適切にレンダリングする、いくつかの成功したレポートがあります。
私が遭遇している問題<select>
は、テンプレートの1つから入ってくるオブジェクトにイベントハンドラーを追加しようとしていて、あまり運がないということです。
テンプレートは次のとおりです。
そして、これがバックボーンビューです:
注:ビューを内部から呼び出している$ ->
ので、DocumentReady
ドロップダウンがクリックまたは変更されるたびに、selectStylist
関数が起動されることを期待しています。残念ながら、それはまだ発生していません:( Chrome Dev Toolsの要素も調べましたが、オブジェクトにイベントリスナーが設定されていません。
私はこれに何時間も立ち往生しており、バックボーンイベントリスナーに関する他のすべての提案を確認しました(つまりthis.el
、ビューをインスタンス化するときにパラメーターとして渡す)が、成功していません。
どんな助けやアイデアもいただければ幸いです!
javascript - backbone.jsイベントとel
さて、バックボーンビューとイベントが発生しないことに関する他のいくつかの質問を読みましたが、それでも悲しいことにそれを取得していません。私は約1日バックボーンをいじっていたので、基本的なものが欠けていると確信しています。これが私が取り組んでいるもののjsfiddleです:http: //jsfiddle.net/siyegen/e7sNN/3/
okay
GridViewのイベントは発生しません。これdiv.grid-view
は、イベントが最初にバインドされたときに存在しないためだと思います。ビューに動的に構築されたイベントのバインドと発生をどのように処理する必要がありますか?(また、これは短い例ですが、他にすべきでないことをしている場合は、遠慮なく私に怒鳴ってください)
javascript - バックボーンモデル:最初の保存イベントを後続のイベントと区別する方法はありますか?
質問のタイトルはそれをほぼ要約しています。モデルインスタンスの初期保存と将来の保存に対して異なる応答をするように私の見解を示したいと思います。現在、isNew
保存する前にモデルの属性を取得してからカスタムイベントをトリガーしていますが、何かが組み込まれているのではないかと思っていました。
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 - Backbone および/または Backbone-Relational を使用して、ネストされたすべてのモデルにイベントをバインドする方法はありますか?
私は非常に頑丈な BackboneRelational を持っています - 多数のネストされたモデルとコレクションを持つモデルです。基本的に、ユーザーがこのモデルまたはそのサブモデル/コレクションについて何かを変更した場合、これを示すために UI で何かを行う必要があります。したがって、サブモデルが変更されても発生するマスター変更イベントが必要です。これを行う簡単な方法はありますか?すべてのモデルを再帰的にトラバースして変更イベントを追加する関数を作成しましたが、同じモデルへの 2 回のバインド、競合状態などの問題があります。
javascript - サーバーに同期されていないモデルの変更を追跡するにはどうすればよいですか?
多くのset
メソッドを実行する変更イベントでモデルを更新するフォームがあります。
Derick Bailey の素晴らしいmodelbinding pluginを使用すると、同じことが自動的に実現できます。
とにかく、フォームを変更すると、モデルは常に更新されます。しかし、実際にmodel.save();
呼び出しを実行する保存ボタンをクリックしない限り、これらの変更はデータベースに反映されません。
したがって、次の方法でフォームから移動した場合:
- ブラウザの戻るボタン
- 別のビューを開くナビゲーションの他のボタン
モデルは新しい名前で保存されましたが、データベースには保存されていないことがすぐにわかります (でリフレッシュするとF5表示されます) 。
この問題の有効な解決策を探しています。これまで私は考えてきました:
model.save()
フォーム要素の on any blur イベントを追加する(まだ、たった 1 つのモデルに対してサーバーへの多くの保存呼び出しが発生します *理想的ではありません)- フォームの終了時にセーブをハックしようとしています *理想的ではありません
- モデルを元の状態に戻そうとしています (モデルのリセットなど)。
*理想的ではありません: ユーザーはフォームから離れて移動し、データを保存したくないことを示しています。ここでは、とにかく保存をハックしようとしています。
モデルをフォームを変更する前の状態にリセットするにはどうすればよいですか?