問題タブ [knockout-mapping-plugin]
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.
knockout.js - KnockoutJS マッピング プラグインを使用した部分更新の実行
現在、この JSON を KO Mapping プラグインで使用していますが、問題なく動作しています。
今、私の要件は「部分的な更新」を実行することです。私がそれをしたいときのいくつかのシナリオ:
- 2 番目のコントロールの Data 配列を変更する必要があります。
- ページ全体ではなく、1 つのコントロールのみを更新する必要があります (これは、シリアル化するクラスであり、この JSON のルートです)。
- ページに別のコントロールを追加する必要があります。
おそらく別の回避策は、元のオブジェクトを で再作成しko.mapping.toJS(viewModel)
、変更してから再度マップすることです...しかし、より良いものが出てくると思います。
編集:試してみましko.mapping.fromJS(updatedControl, viewModel.Controls()[0])
たが、うまくいきませんでした。これが私のコードです:
応答:
EDIT2: http ://jsfiddle.net/faloi/4FcAy/10/でチェックしてください
javascript - Knockout.js オブザーバブル バインディングが更新されない (JSON マッピングを使用)?
背景:マッピング プラグインを使用して、単一ページの knockout.js アプリを作成しました。データは、サーバーから Websocket JSON を介して更新されます。アプリがデータを正常に受信しており (コンソールにデータを出力)、オブジェクトの削除/追加があった場合、ViewModel は問題なく更新されていることがわかります。
問題:オブジェクトのプロパティがサーバーから更新されても、ViewModel は変更されません。更新のたびに何らかの方法でオブジェクト プロパティを返す必要がありますか?
関連するコードのスニペットは次のとおりです。
ViewModel では次のようになります。
洞察をありがとう!
javascript - ネストされた配列の KnockoutJS マッピングの更新「スタック領域不足」
更新: 問題を再現するためにフィドルを作成しようとしています: http://jsfiddle.net/gY2JV/29/ END UPDATE
タイプ DocModel のサーバーからのオブジェクトがあります。そのヒエラルキーはこんな感じ。
次のビューモデルで使用します。
そして、これが私のビューです(td内のものはおそらく問題とは無関係です-ドキュメント内の各ドキュメントに一連のスカラープロパティをマッピングしているだけです):
ノックアウトがビューモデルを更新しようとする前にブレークすると、response.d が正しいデータを正しい形式で返していることがわかりますが、スタック領域が不足しています。どうしたの。
knockout.js - KnockoutJS は、マッピング データが同じであっても、常にサブスクリプションを通知します
foreachバインディングでのKnockoutの便利な「afterRender」メソッドは、データが追加されたときにのみ起動し、削除されないようです。
ここでそれをテストできます - http://jsfiddle.net/farina/4BaXs/1/で [load initial] をクリックし、4 つのアラートを確認してから [load delete] をクリックしても何も起こらないことに気付きます。
そこで、この問題を解決するために、ko.mapping.fromJS 配列への手動サブスクリプションを作成しようとしましたが、データが変更されていなくても、AJAX からデータを更新するたびに呼び出しが発生するだけです。
マッピング プラグインが何らかの形で失敗しているように感じます。データは常に新しいものであると考えています。
配列が変更されたときにのみ発生する何らかのイベントはありますか? 個々のアイテムの購読は期待どおりに機能しますが、明らかにアイテムのリスト全体を購読することはできませんか?
knockout.js - ネストされたforeachで停止スクリプトエラーが発生するknockoutJS
ビューをレンダリングするためにknockout.jsを使用しています.サーバーからデータを取得し、このようにバインドしています..
私の見解...私はいくつかのビットをトリミングしました...しかし、バインディングは同じです...
データにはオブジェクトの配列が含まれており、それらのオブジェクトのそれぞれに別の配列が含まれています... レンダリングする必要がある項目は約 500 あります。
私がテストしている間、私は問題を経験していませんが、展開すると、それが遅い PC であるかどうかはわかりませんが、「このスクリプトは低速で実行されています - 停止しますか?」というメッセージが表示されます。メッセージ。「いいえ」を数回クリックすると、レンダリングされます。
ノックアウトで大きなデータセットを扱うテクニックは何ですか? 理想的には、レンダリングを非同期で実行し、ユーザーが忙しく仕事をしている間、自分のことを続けられるようにしたいと思います...
プロパティは実際に監視可能である必要はありません - これは 1 回のレンダリングです...何も変わりません。簡単にするために、マッピング API を使用しています。
更新: OK、変更を加えて、マッピング API を使用しなくなりました - ページは読み込み中ですが、まだゆっくりと... 何かアイデアはありますか? 変化する:var viewModel = data;
knockout.js - プロトタイプで計算されたオブザーバブルは KnockoutJS で実行可能ですか?
サービスから戻ってくる一連のアイテムがあります。Item インスタンスごとに計算されたオブザーバブルを定義しようとしているので、本能的にそれをプロトタイプに配置するように指示されます。
計算されたオブザーバブルの 1 つのケース: システムはポイントを計算しますが、ユーザーは計算された値をオーバーライドすることを選択できます。ユーザーがオーバーライドを削除した場合に備えて、計算された値を利用できるようにしておく必要があります。また、ユーザーが割り当てたポイントと計算されたポイントを合体させ、合計を合計する必要があります。
マッピングを使用して次のことを行います。
現在の動作方法では、無名関数を呼び出して、計算されたオブザーバブルを返す必要があります。これは、バインディングごとに計算されたオブザーバブルの新しいインスタンスを作成するように見えます。これは、プロトタイプに配置するという点のほとんどを無効にします。また、オブザーバブルにアクセスするたびに使用する括弧の数を解読しなければならないのは少し面倒です。
また、やや壊れやすいです。コードで Points() にアクセスしようとすると、できません
item ではなく、Points() のコンテキストが DOMWindow に変更されるためです。
マッピングに create() で計算されたものを配置すると、コンテキストをキャプチャできますが、各オブジェクト インスタンスにメソッドのコピーが存在します。
Michael Best の Google グループへの投稿 ( http://groups.google.com/group/knockoutjs/browse_thread/thread/8de9013fb7635b13 ) を見つけました。プロトタイプは、「アクティブ化」時に新しい計算されたオブザーバブルを返します。「アクティブ化」(おそらく Objs ?) と呼ばれるものはわかりませんが、オブジェクトごとに 1 回発生すると推測しており、「これ」がどのスコープを取得するかはわかりません。
この時点で、私は公開されたドキュメントで利用できるものを過ぎていると思いますが、ソースから何が起こっているのかを解読するためにまだ取り組んでいます.
asp.net-mvc - KnockoutJS:ko.mapping.fromJSの問題
私のJS:
テーブルhtml:
更新をトリガーするボタン..ディクショナリを検索して結果を返し、現在テーブルにあるものを置き換えます。
私のアクションメソッドでは、これが返されます:
私が抱えている問題は、何らかの理由で無限ループに陥っているように見えることです。アクションにブレークポイントを設定すると、それが何度も何度も繰り返されるのを見ることができます...継続的に..
私は何が間違っているのですか?ノックアウトはまったく新しいです(JSでもまったく優れているわけではないので、漠然とした答えを出さないでください)
knockout.js - ノックアウト マッピング toJS バグ? 空の配列項目
knockoutjs マッピング プラグイン 2.11 では、viewmodel (配列要素を含む) が ko.mapping.fromJS で更新され、新しい配列要素の長さが古いものよりも長い場合、ko.mapping.toJS が空の配列項目を生成することがわかりました。
マップされた最初のデータは次のとおりです。
次に、ビュー モデルを新しいオブジェクトで更新しました。
その後、ko.mapping.toJS() を呼び出したところ、3 番目の配列項目が空のオブジェクトであることがわかりました。これがバグなのか、何かを見逃したのかはわかりません。私が気付いたもう1つのことは、データを初めて更新したときにのみ発生することです。ビュー モデルを initData で更新してから newData で更新すると、結果は正しくなります。http://jsfiddle.net/gonglei/xgPSq/
編集:あなたの答えジェイソンに感謝します。あなたのソリューションは、私の実際のプロジェクトでは私の状況に合わないようです。変更されたデータ オブジェクトを取得してサーバーに送信する必要があります。したがって、ko.mapping.toJS を呼び出した瞬間に、計算された関数で JSON 文字列を表示するだけでなく、正しいデータ オブジェクトをすぐに取得できることを願っています。ko.mapping.toJS の呼び出しの直後にブレーク ポイントを配置し、データ オブジェクトを監視すると、3 番目の要素は実際には空です。そして、私のサーバーはこの空の要素を受け取りました。スロットル エクステンダーは正しいオブジェクトを取得しましたが、非同期の方法です。とにかく、私はそれをバグとして報告しました。開発者がそれを確認できるかどうか、または解決策を教えてください。
knockout.js - テーブルにデータを表示するノックアウトマッピングプラグイン
JSONからのデータは次のとおりです。
Project Name
このデータを、、、、、のようなテーブルヘッダーを持つテーブルTurbine
に 表示したいと思いFault
ますDescription
。
Knockout.jsとマッピングプラグインも使用しています。これが私がこれまでに試したことを示すJSFiddleです。
私には主に2つの目標があります
- このデータをテーブルに入れます
- 障害ステータスが変更されるたびに行を更新します。各行は、ProjectNameとTurbineの組み合わせによって一意に識別されます。
Sandeepに感謝します。
マッピングプラグインを使用しようとすると、このステートメントに問題が発生します。
var viewModel = {};
viewModel.Stats = ko.mapping.fromJS(data);
私が間違っていることを教えてください。また、データの更新を受け取った場合、次のステートメントは機能しますか?
ko.mapping.fromJS(data,viewModel);
マッピングプラグインが機能していなかったため、ko.utils.Arraymap関数を使用する必要がありました。
ありがとう