問題タブ [ko.observablearray]

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 投票する
1 に答える
228 参照

javascript - ノックアウト.jsで監視可能なオブジェクトにプロパティを追加した後にTypeErrorが発生するのはなぜですか?

MyViewModel の一部に新しい observableArray-properties を追加するカスタム ハンドラーを作成して、ハンドラーによってバインドされた要素内のネストされたテンプレートが常に正しい配列を持つようにしました。完全な例については jsfiddle を参照してください

ハンドラー内で、現在のオブジェクトに(私の例では「子」)bindingContext.$dataという名前のプロパティとして監視可能なオブジェクトがあるかどうか、またその監視可能なオブジェクトに名前(「pos1」)を持つ独自の監視可能な配列があるかどうかを確認しました。 -そして、不在の場合は、私が彼らを評価します。valueAccessor()[0]valueAccessor()[1]

最初に、 valueHasMutated() を試し、ここに示すようにオブザーバブルをリセットしました

これはほとんど機能しました-値をプッシュするたびにミューテーションについて通知したくなかったのでvalueHasMutated()、ハンドラー内に配置しようとしましたobservableArray()が、追加した後、結果はUncaught TypeError: object is not a function(typeof上記の1行はそうでなければ XD と言います)。

これらのオブジェクト参照を根本的に間違った方法で使用しているのでしょうか、それともノックアウトがどのように魔法であるかについての理解が欠けているだけですか? :D

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

jquery - ノックアウトobservablearrayは、サーバーからの値で更新されたアイテムを受け入れません

ノックアウト製本で表示されたアイテムリストがあります。簡略化すると、次のようになります。

選択リストには、最初のリストに追加できる潜在的なアイテムがあります。値がダブルクリックされると、selectedItem で ajax 呼び出しが開始されます。

どちらの配列も、サーバーで定義された同じモデル構造を使用します。

ビューモデルは次のようになります。

currentItems を含むリストは、ko.mapping を使用して MVC 初期モデルからロードされます。possibleItems には、動的な ajax 呼び出しからの値が読み込まれます。しかし、両方とも期待どおりにロードされているので、それらのバインディングは問題ないと思います。

ダブルクリックは期待どおりにトリガーされます。サーバーで呼び出しが検出され、適切な itemId が返されます。正常に返された場合、その値を selectedItem に設定する必要があります。次に、selectedItem を currentItems 配列に追加し、最初のリストに表示する必要があります。

私はいくつかの試みで詳しく説明しましたが、成功しませんでした。私はそれらを一度に1つずつ試し、他の人がコメントしました。

Attempt1: itemId は返されますが、最初の hello に到達していません。なんで?それは観察可能なプロパティを設定する方法ではありませんか?

Attempt2: 値が設定され、hello2 が表示され、itemId が設定されていることが報告されました。ただし、プッシュ呼び出しでは、項目が currentItem リストに表示されません。

Attempt3: 同じアプローチですが、今回はビューモデルの selectedItem にプロパティが設定されています。今回は hello3 に到達していません。

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

javascript - ノックアウト可観測配列への新しいオブジェクトの追加

John Papa の SPA ソース コードを使用して、独自のアプリを作成しています。監視可能な配列に新しいオブジェクトを追加したいという問題があります。私のコードにはオフィスと連絡先の数のループがあるため、これは難しいと感じています。そのため、KO オブザーバブル配列に要素を追加するときは、適切な場所に追加したいと考えています。

クリックすると:

ユーザーがデータを入力するための空のテキストボックスを持つ新しい tr が必要です。

だから私は新しい要素をプッシュしています

機能中

しかし、私はこのエラーが発生します:

新しい配列を多次元の観測可能な配列に追加する良い方法を知っている人はいますか?

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

javascript - ノックアウトオブザーバブル配列のネストされた子に追加する方法

ノックアウト監視可能配列に追加するコードがいくつかあります。監視可能配列をオブジェクトに変換し、新しいオブジェクトのシフトを解除してから、このオブジェクトをビューモデルにマッピングします。これは機能しますが、非常に遅いようです。2~5秒以上かかります。

変換プロセスを実行する代わりに、オブザーバブルに追加しようとしましたが、次のエラーが発生しました。

これはエラーの原因となるコードです

代理店がどのように見えるかについては、私のスクリーンショットを参照してください。

私のグローバル観測可能配列

この監視可能な配列に追加する正しい方法は何ですか? 最新の値は変更を追跡するためのメカニズムであることを理解しているので、それを改ざんすべきではありませんか?

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

knockout.js - JQuery ドラッグ/ドロップによる observableArray バインディングのノックアウト: 望ましくない動作

バインディングを使用してノックアウト監視可能な配列にバインドされたコンテナー div にいくつかの div がありforeachます。それはうまく機能しています。

ノックアウト afterAdd イベントでは、jQuery を使用して (新しく作成された) div のクリック イベントのリスナーを作成します。

div をクリックすると削除されます。div がビューから消えます。それはうまく機能しています。

各 div もドラッグ可能にします。

ドラッグアンドドロップは正常に機能しています。

ただし、 divを droppable にドラッグ アンド ドロップした後にdiv をクリックしても、消えません。ドロップ可能なものにしがみついている、またはドロップ可能なものにしがみついています。div を忘却に送るには、div を 2 回クリックする必要があります。

この動作を回避するためにできることはありますか?

0 投票する
3 に答える
1747 参照

knockout.js - メニューを開いた要素がわかるように、ノックアウトでコンテキストメニューのクリックをバインドする方法

私は、containerDiv への foreach バインディングを使用してバインドされた observableArray を持っています。Observable 配列に新しいアイテムが追加されると、コンテナー内に新しい div が作成されます。

動的に作成された各 div をクリック (またはタップ) すると、一種の独自のコンテキスト メニューが表示され、いくつかのオプションが表示されます。クリックしただけです」。

contextmenu は、どの div がクリックされたかを把握できるため、observableArray 内のどのインデックスを削除するか、その値を変更する必要があるかを把握できます。しかし、コンテキスト メニューはどのようにこの情報を ViewModel に伝えるのでしょうか?

context-menu-option のクリック イベントへのバインドは、どのメニュー項目がクリックされたかを ViewModel に通知するだけです。情報の他の重要な部分、編集または削除する必要があるコンテキストメニューを開くための div は明らかにされません。

ViewModel にフィードする方法 a) 発生する必要がある特定のアクション (メニューの選択) および b) 実行する必要があるオブザーバブル配列内のアイテム?