問題タブ [property-binding]
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.
java - ReadOnlyBooleanWrapper: Bindings.or で使用した場合の動作が正しくない
ReadOnlyBooleanWrapper
を使用して 2 つのオブジェクトをバインドすると、非常に奇妙な動作に遭遇しましたBinding.or
。b1.set(true)
つまり、最初の引数で行うと、結果は正しくありません (まだ false) 。
これは簡単な単体テストです (失敗します):
同じテストがSimpleBooleanProperties
正常に機能することに注意してください。
実装にそのようなバグがあるとは想像できないので、私はおそらくここでいくつかの点を見逃しており、プロパティを誤用しています! :)
それを説明する方法についてのアイデアをありがとう!
アップデート:
あなたの答えとコメントは私を正しい軌道に乗せました:)私はまだ解決策を持っていませんが、ラッパー自体ではなく(公開されていると思われる)にバインドすると、テストに合格することor
に気付きましたReadOnlyProperties
:
これは、内部の読み取りおよび書き込み可能なプロパティと読み取り専用のプロパティの間の同期が何らかの形で壊れていると思います (?)
についてのドキュメントからReadOnlyBooleanWrapper
:
このクラスは、読み取り専用プロパティを定義するための便利なクラスを提供します。同期される 2 つのプロパティを作成します。1 つのプロパティは読み取り専用で、外部ユーザーに渡すことができます。もう 1 つのプロパティは読み取りと書き込みが可能で、内部でのみ使用する必要があります。
java - リスト変更後の JavaFX Update FlowPane
そのため、JavaFX を初めて使用した後、JavaFX を使用するのは 2 回目であるだけに、非常に大きなプロジェクトを割り当てられました。画像の追加、画像の削除、タイトル/説明/場所による並べ替え、タイトルの編集機能、撮影日、説明、場所などの基本的な機能を備えたフォト アルバムを作成する必要がありました。朗報: これらのうち 1 つを除いてすべて完了しました。
写真を削除すること、またはimageData
アレイから削除された後に画面から削除することは、複雑であることが証明されています。これは、私がこれを組織した方法によるものだと確信しています。クラス用に独自の「changedProperty」を作成Album
してソースから観察しようとしましたが、どうやらそれをいじったか、思ったように機能しません。
それで、それはフロップでした。私も試してみましたObservableList
が、それはソースで作成されたため、クラスobsList.remove()
内からはできませんでした。Album
繰り返しますが、私はそれを間違って実装しただけかもしれません。
繰り返しますが、画像を から削除することはできますArrayList imageData
が、ギャラリーには残りますFlowPane
。
ソース.java
アルバム.java
ImageData.java
DisplayEditDetail.java
java - 式またはそれを回避する何らかのアプローチによる双方向プロパティ バインディング
私はプロパティ バインディングに比較的慣れていないので、設計上の問題に対処する方法について高レベルのアドバイスを探しています。ここでは簡単な例を説明します。
問題の説明
この例の目標は、ユーザーがパンおよびズーム可能な 2D 空間でインタラクティブにボックス/長方形の領域を指定できるようにすることです。ボックスが描かれている 2D 画面空間は、2D の「実空間」にマッピングされます (たとえば、電圧対時間デカルト空間、または GPS など)。ユーザーは、ビューポートをいつでも垂直/水平にズーム/パンできる必要があります。これにより、これら 2 つの空間間のマッピングが変更されます。
ユーザーは、このデモのように、境界線/角をドラッグしてビューポート内の長方形を指定します。
ユーザーが四角形を指定すると、その座標 (実空間) がプログラムの別の部分に渡されるか、読み取られます。
私の根拠
私の最初の直感は、JavaFX ノードの組み込みの scale/translate プロパティを使用してマッピングを実装することでした。ズームは、概念的な長方形自体を大きくするだけで、境界線や角のハンドルを太くするべきではありません。
(以下では、矢印は因果関係/影響/依存関係を表します。たとえば、A ---> B
プロパティ B がプロパティ A にバインドされていることを意味する場合もあり (または、イベント ハンドラー A がプロパティ B を設定することを意味する場合もあります)、<----->
双方向のバインドを表す場合があります。--+-->
複数の入力オブザーバブルに依存するバインディングを表すことができるような尾の矢印)。
それで私の質問は次のようになりました:私は次のどれをすべきですか?
real-space-properties ---+--> screen-space-properties
real-space-properties <--+--- screen-space properties
- または別のものを使用して
<---->
一方では、マウス イベントと、画面空間にレンダリングされた四角形自体があります。これは、上記のデモのように、自己完結型のインタラクティブな四角形 (画面空間の位置/寸法のプロパティを外部から観察 (および必要に応じて操作) できる) を支持します。
一方、ユーザーがパン/ズームを調整するときは、(画面空間ではなく) 実空間での四角形のプロパティを保持する必要があります。これは、パンとズーム状態のプロパティを使用して、画面空間のプロパティを実空間のプロパティにバインドすることを主張しています。
上記の両方のアプローチをまとめようとすると、問題が発生します。
この図は私には非常に理にかなっていますが、* での「双方向」の 3 方向バインディングのようなものは直接可能ではないと思います。しかし、おそらくそれをエミュレート/回避する簡単な方法はありますか? それとも、まったく別のアプローチを取る必要がありますか?
java - プロパティの否定に双方向にバインドする
与えられた
A.get() == -minusA.get() 常に両方ができるように、それらの否定を双方向にバインドする方法はありますset()
か?
angular - 入力をAngular2の数値にキャストしますか?
コンポーネントへの入力を数値に自動的にキャストする方法はありますか?
たとえば、このコンポーネントは次のように初期化されます。
そしてここで定義されています:
limit
数値または整数に自動的にキャストする方法はありますか?
それ以外の場合は、 is を文字列または任意の in として入力するかTypescript
、コンポーネントを in の数値にキャストして開始する必要がありますがngOnInit()
、これは避けたいと思います。
qt - QML からプロパティをシングルトン オブジェクト プロパティにバインドする方法
シングルトン オブジェクト プロパティから QML プロパティにバインドする方法について質問があります。しかし、QML プロパティをシングルトン オブジェクトにバインドしたい場合はどうでしょうか。
シングルトンクラスの定義は次のとおりです。
そしてQMLで
textField.text
Singleton オブジェクトのプロパティにバインドしたいと思いname
ます。次のような回避策でバインドすることが可能です。
しかし、これは代入であるため、実際にはプロパティ バインディングにはなりません。
では、シングルトン オブジェクト プロパティへのより自然なバインディング方法はありますか?
javafx - JavaFX:テキストプロパティが空白かどうかを確認します(空だけではありません)
テキスト フィールドに何かが含まれているかどうかに基づいてボタンを有効または無効にしたいと考えており、プロパティ バインディングを使用してこれを実装したいと考えています。
最初に、テキスト フィールドの text プロパティで isEmpty() メソッドを使用して、ボタンの disabled プロパティのブール値バインディングを作成しました。
バインディングは機能しますが、「テキスト フィールドに何かが含まれる」という私の定義は、 isEmpty() メソッドが行うものとは異なります。つまり、テキストの長さが > 0 であるかどうかをチェックするだけです。しかし、「実際の」テキストがあるかどうかに興味があります。 、つまり、テキスト フィールドが空白かどうか(空ではないだけでなく、実際には空白だけではない)。
残念ながら isBlank() メソッドはありません。また、Bindings ユーティリティ クラスにも適切なものが見つかりませんでした。Bindings.createBooleanProperty メソッドを使用して好きなカスタム ブール プロパティを実装できることがわかりましたが、カスタム バインディングを定義するという概念にはまだ慣れていません。私の場合、そのようなブール値のプロパティをどのように実装する必要がありますか?
javascript - 補間とプロパティバインディングの違い
プロパティを定義するコンポーネントがありimageUrl
、テンプレートでこのプロパティを使用して画像の URL を設定します。補間とプロパティバインディングを使用してこれを試しましたが、どちらも機能しますが、2つの違いや、どちらをいつ使用するかを見つけることができません。誰も違いを知っていますか?
qt - バインディングを完全に壊すことなく QML プロパティの一時的な値
QML (少なくともバージョン 5.6 1まで) では、JavaScript コンテキストで新しい値が割り当てられると、プロパティ バインディングが壊れます。
一度reassignBool
呼び出されると、boundBool
のtrue
状態に関係なく になりますsourceBool
。
元のバインディングを壊さない一時的な値をプロパティに割り当てられるようにしたいと考えています。NOTIFY
一時的な値は、元のバインディングに関連付けられたシグナルのいずれかがトリガーされるまで持続し、その時点で、バインドされたプロパティはバインディングによって計算された値を再び反映します。
ユースケースの例として、ユーザーが 2 回続けて押すことができないようにしたいボタンがあり、いくつかのルールに従って有効または無効になっているとします。
<condition1>
ボタンがクリックされたときにが最終的に になると仮定すると、false
ボタンは最終的に適切に無効になりますが、すぐには無効になりません。
だから私は次のようなことをしたいと思います:
...しかし、もちろん、バインディングを再確立するとすぐに、まだになっcondition1
ていないので、再びなります.false
enabled
true
に関連付けられたシグナルを、 を呼び出すハンドラにConnections
接続する何らかのオブジェクトを作成して、オブジェクトを削除できると思います。しかし、これはかなり複雑で洗練されていないように思えます。NOTIFY
<condition1>
Qt.binding
Connections
enabled
がに設定されていることを確認する方法はありますfalse
immediately 、その後、それらの信号のいずれかが発行されるとすぐに、NOTIFY
信号に再バインドされますか?<condition1>
<condition2>
1割り当てが 5.7 のバインディングにどのように影響するかは完全にはわかりませんが、プロパティに値を割り当ててもバインディングが自動的に壊れないことはわかっています。したがって、これは 5.7 ですぐに使用できるように自動的に機能する可能性があります。