問題タブ [knockout-postbox]

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.

0 投票する
4 に答える
7420 参照

knockout.js - Knockoutでビューモデルをリンク/同期する最良の方法は何ですか?

1つのページに複数のビューモデルがある場合、それらを同期し続けることができるようにするにはどうすればよいですか?たとえば、1つのアイテムが追加されたり、1つのビューモデルでボタンがクリックされ、他のビューモデルがその変更に敏感であるようにしたい場合、Knockoutはこれをネイティブに管理できますか、メッセージングまたはpub/subアーキテクチャを使用する方が適切です。

モデル間のオブザーバブルを管理する必要がないようにしたい。

0 投票する
1 に答える
1144 参照

knockout.js - コンテンツではなく関数として表示されるノックアウト配列

私は次のものを持っています:

それから私の見解では:

私はa,b、publishedSelectedSets の内容のリスト (数字のみ) を表示することを期待していますが、表示される内容は次のとおりです。

選択されたセットID: a,b

function observable() { if (arguments.length > 0) { // Write // 値が変更されていない場合は書き込みを無視する if ((!observable['equalityComparer']) || !observable['equalityComparer'](_latestValue 、引数[0])) { observable.valueWillMutate(); _latestValue = 引数[0]; (DEBUG) observable._latestValue = _latestValue の場合。observable.valueHasMutated(); これを返します。// 連鎖代入を許可します } else { // 読み取ります ko.dependencyDetection.registerDependency(observable); // 呼び出し元は、「読み取り」操作を行った場合にのみ変更を通知する必要があります return _latestValue; } }

の最後に括弧を追加しようとしましたpublishedSelectedSets()が、同じことが得られます。デバッガーを使用して配列が_latestValue正しく更新されていることを確認できますが、DOM でデータが正しく表示されません。publishedSelectedSets

私は何を間違っていますか?

SELECTED_SETS:

ko.utils.arrayMap の単純化された使用で動作している JSFiddle: http://jsfiddle.net/PTSkR/80/

私のコードが機能しない理由をまだ理解できません...

0 投票する
1 に答える
391 参照

knockout.js - ko ポストボックスの値が公開されたときにルックアップを実行する

監視可能なプロパティが別のビューモデルによって変更されたときにルックアップ関数を起動する方法を知りたくて、この質問を書き始めましたが、現在、この問題にどのように取り組んでいるのか疑問に思っています。いずれにせよ、ここに私のシナリオがあります:

アイテムのグリッドがあるページがあります。ユーザーがボタンをクリックしてアイテムを編集すると、元のデータすべてと、メイン グリッド オブジェクトにないそのレコードに関する詳細データを含む編集ポップアップ ウィンドウが表示されます。

編集ウィンドウには、データの「作業コピー」用の別の観察対象があります。ユーザーが保存ボタンをクリックして変更をコミットすると、それを元のオブジェクトにコピーして、変更がグリッドに反映されるようにする予定です。

現在、ko.postbox ライブラリを使用して 2 つのビューモデル間の通信を行っています。どちらにも、「syncWith」を使用して選択および同期されたアイテムを格納するためのオブザーバブルが含まれています。

これがどのように見えるかのアイデアです:

ユーザーがクリックしてアイテムを編集すると...選択したアイテムを編集ウィンドウ vm (既に syncWith で発生) に公開したいのですが、AJAX ルックアップを実行して、そのアイテムに関する残りの情報を取得します (これを行う方法のアイデアが不足しています)。

その特定のオブザーバブルを手動でサブスクライブすることと、編集ウィンドウのビューモデル内で計算されたオブザーバブルを使用して別のルックアップ関数を呼び出せるようにすることを検討しましたが、これまでのところ、実用的な解決策を見つけることができませんでした: (

私は現在の考え方で間違った道を進んでいますか、それともそのルックアップを実行する方法を誰かが知っていますか?

0 投票する
0 に答える
656 参照

knockout.js - pubsubを使用してオブジェクトを他のビューモデルに渡しますか?

新しいノックアウト バージョン 3.2 (および requirejs) を使用して 2 つのノックアウト コンポーネントを作成しました。

最初のコンポーネントには、コンポーネントの場合、ビューモデルの監視可能な配列に含まれるオブジェクトのテーブルを表示するための html テンプレートが含まれています。

2 番目のコンポーネントには、最初のコンポーネントから選択した項目の値を編集するためのモーダルを表示するための html テンプレートが含まれています。

ご覧のとおり、最初のコンポーネントから選択した ID を伝達するために pubsub を使用しました。これは、選択したソース項目の詳細を取得するためにサーバーと通信するための ID を必要とするコンポーネントに使用されます。ただし、選択したアイテムを編集する場合、すべてのデータはクライアントで既に認識されているため、追加の ajax リクエストは解決策にならないため、完全な sourceEntry オブジェクトを伝えたいと考えています。

これは、ノックアウトポストボックスの pubsub 実装を使用して可能ですか?

次の質問はおそらく簡単なものです。コンポーネントのモデルは、編集時にのみロードする必要があります。非表示セクションは、パフォーマンスを考慮すると意味がありません。ノックアウトを使用して実行時にコンポーネントを動的に注入する方法はありますか、またはコンポーネントを動的に追加するには jquery が必要ですか。ここでのベストプラクティスは何ですか?

0 投票する
2 に答える
2043 参照

knockout.js - KnockoutJS によるコンポーネント間通信

次のビュー モデルを含む製品概要ページがあるとします。

  • ProductIndexViewModel ; ページ全体にバインドされたルート ビュー モデル
    • ProductListViewModel ; すべての製品を表示するためのウィジェット
    • ProductRegistrationViewModel ; 新商品登録用ウィジェット

ウィジェットは、カスタム HTML 要素 (<product-list></product-list>および など<product-registration></product-registration>) を使用してロードされます。これらのウィジェットの知識をルートモデルに入れる必要がないので、これは素晴らしいことです。ただし、ユーザーが新しい製品を登録した後、製品リストも更新したいと思います。要するに:

ProductRegistrationViewModel から ProductListViewModel にシグナルを送信するにはどうすればよいですか?

私はすでにKnockout Postboxを調べましたが、これで問題が解決するようには見えません。複数の製品リストがあり、そのうちの 1 つだけを更新したい場合はどうすればよいですか? 理想的には、コンポーネントのビュー モデルに一連のパブリック メソッドを実装したいと考えています。次に、次のように、ページのルート ビュー モデルから 2 つを結び付けます。

ただし、ここからこれらのビュー モデルにアクセスすることはできません。それとも私ですか?

ルート ビュー モデルから子ビュー モデルにアクセスするにはどうすればよいですか?

最後に、誰かが私の問題に対するより良い解決策を見つけたら、私はすべて耳にします!

0 投票する
0 に答える
412 参照

javascript - ノックアウトポストボックス同期で観測可能な配列が機能しない

以下のビューモデルがあります。ビュー モデル 1 には、accountList にレコードを追加するコードもあります。次に、ビューモデル 2 で accountList を使用しようとすると、常に空になります。syncWith はこれら 2 つの observableArray の同期を保つべきではないでしょうか?

ビューモデル 1

モデル 2 を表示