問題タブ [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.

0 投票する
6 に答える
40574 参照

javascript - Knockout.jsすべてのネストされたオブジェクトを監視可能にします

Knockout.jsをMVVMライブラリとして使用して、データをいくつかのページにバインドしています。現在、WebサービスへのREST呼び出しを行うためのライブラリを構築しています。私のRESTfulWebサービスは、単純な構造を返します。

私には観察可能な主な親がいmyObjectます。私がする時

のオブザーバブルは次のmyObjectとおりです。

  • id
  • name
  • surname

どうすればdetails(そして理論的には構造内の任意のオブジェクトを観察可能にすることができますか)?この動作が必要なのは、詳細に計算されたオブザーバブルを設定し、内部データのいずれかが変更されるとすぐに通知されるようにするためです。

トリックを実行する基本的な再帰関数を設定しました。もちろん、それはmyObject.details観察可能にはなりません。

間違った参照に関するものだと確信していますが、どうすればこれを解決できますか?ありがとうございました。

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

knockout.js - 観測可能な配列のノックアウトマッピングが機能していないようです

MVCプロジェクトでノックアウト(KO)を使用しています。サーバー上に(グリッド用の)MVCモデルを作成し、それをビューに渡します。ビューでは、シリアル化されてKOモデルに変換され(ko.mappingを使用)、バインドに使用されます。そのバインディングは、グリッド作成のためにHTMLで使用されます。

これは私のMVCグリッドモデルがどのように見えるかであり、ko.mappingによって対応するKOモデルに変換されます。

明らかなように、メインモデルクラスGridModelは、プロパティとして存在する次のクラスで構成されています。

GridBodyModel:グリッド本体にレンダリングされる行のリストがあります。

GridContext:プロパティとして総ページ数があります。他のプロパティもありますが、それはこの説明の範囲外です。

GridHeaderModel:グリッドのヘッダーに表示する必要のあるセルのリストがあります。

次に、新しいページの読み込み時に実行されるこのスクリプトがあります。

Global_GridKOModelはグローバルJavaScript変数です。 モデルは、サーバーからのMVCグリッドモデルです。

ユーザーは、ページでさらに検索を再度実行できます。私はAjaxを介して新しい検索条件を投稿することでこれを処理します。この投稿では、新しいMVCモデルが作成され、Ajax応答として返送されます。次に、この新しいMVCモデルを使用して、ko.mappingを使用してGlobal_GridKOModelを更新します。これにより、新しいページの読み込み時に以前に構築されたグリッドが(新しいデータで)更新されます。これが私がやっている方法です。

次のシナリオを除いて、すべてが正常に機能しています。

結果が返されないAjaxリクエストが作成されます。つまり、GridBodyModelとGridHeaderModelがモデルGridModelでnullになります。そのタイムグリッドは、レコードが見つからなかったことを正しく示しています。正解です。これは、次のHTMLバインディングによって発生します。

この後、別のAjaxリクエストが行われたが、今回はレコードが返される場合(firebugで応答を確認し、レコードが実際に返されることを確認しました)。この時間グリッド構築は、さまざまな監視可能なアレイにアクセスする場合に発生します。たとえば、グリッドのページャーを作成するには、私が作成したHTMLバインディングを使用します。

今回、KOはfirebugで見られる次のエラーをスローします。

バインディングを解析できません。メッセージ:TypeError:GridHeader.Cellsは関数ではありません。バインディング値:attr:{colspan:GridHeader.Cells()。length}

レコードが返される限りは正常に機能しますが、上記で説明したように、レコードが返されないと機能しなくなります。レコードが返されない場合、以前の応答ではGridHeaderがnullであったことに注意してください。ko.mappingで何か魚臭い匂いがします。監視可能な配列をマッピングする際に問題があると思います。

それで、私が正しくやっていないのは何ですか?誰かお願いします?

はっきりと述べていない場合は、遠慮なく説明を求めてください。

前もって感謝します。

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

knockout.js - プランジンのマッピングでknockoutjs $indexが機能しない

私はasp.net mvc 3とknockoutjs 2.0を使用しています。マッピングプラグインを使用して、以下のようにモデルをjsonとして変換しました

私のモデルは

$index が機能していません。

前もって感謝します

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

asp.net-mvc - Knockout.jsとチェックボックスのリスト:MVCコントローラーに投稿

私は次のようなMVCビューモデルを持っています:

CountriesCollectionオブジェクト(9行目)は次のようになります。

ここで、CountriesCollectionの新しい空白のインスタンスを作成し、それをDirectorySearchModelビューモデルの空白のインスタンスに追加して、すべてをKnockout.jsのjavascriptビューモデルにシリアル化します。

チェックボックスは次のように表示されます<input checked="checked" data-bind="checked: Countries.arrCountries" id="Countries_arrCountries30" name="Countries.arrCountries" type="checkbox" value="1">。カップルをチェックするということは、このKnockout.jsビューモデルになってしまうことを意味します。

ビューを通常どおりに(つまり、Knockout.jsではなく送信ボタンを介して)MVCアクションに送信すると、チェックされたアイテムのリストを取得するDirectorySearchModelように要求できmodel.Countries.arrCountriesますが、...

また...

同じことを期待する別のアクションにDirectorySearchModelmodel.Countries.arrCountries常にnullarrCountriesMVCがsを期待しているときにKnockout.jsがエントリをstring[]sとして投稿したためかどうか疑問に思いましint[]たが、MVCコードをstring[]sを期待するように変更してもそれほど変わらないようです。内のCountriesCollectionオブジェクトはDirectorySearchModel存在しているように見えますが、それはarrCountries常に内にありますnull

何か案は?どんな助けでも大歓迎です!

編集

Knockout.js viewModelを受け取るアクション:

getResultCount方法:

修繕!

Knockout.jsビューモデルをmvcアクションに戻すために$.postから$.ajaxに切り替えるだけでよいことを指摘してくれた、Konstantinに感謝します。これが私が使用している$.ajaxコードです:

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

jquery - ノックアウトを介してMVCアクションに送信されたフォームには、余分な二重引用符があります

ノックアウトモデルを介してコントローラーアクションに送信されたデータに問題があります。各文字列フィールドには、それを囲む余分な二重引用符があります。これは問題です。

データを手動で逆シリアル化することはできますが、MVC3を使用している場合、この問題はまったく発生しないはずです。ajax投稿ではなく、フォーム送信を行う必要があることに注意してください。

HTML:

スクリプトコード:

コントローラのアクション:

投稿後のモデルの内容:

ここに画像の説明を入力してください

生の投稿データ:

私は何が間違っているのですか?

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

knockout.js - ajax リクエストが返されるたびに再度マップしようとするノックアウトのモデル。ビューが更新されていません

asp.net mvc 2 プロジェクトでノックアウトを使い始めました

とにかく簡単なことをやってみた。私は次のようなモデルを作成しました:

次に、jquery の document.ready で次のように呼び出しました。

私が持っているaspx自体に:

最初にデータを userViewModel に入れると、ビューは期待どおりに表示されます。それは素晴らしいことですが、最初はビューを空から始めたいと思っています。ユーザーがユーザーを選択した後、私は ajax リクエストを作成します。私の応答は次のとおりです。

次に、コールバック関数で:

それだけだと思います。ビューがサーバーからの新しいデータで更新されません...何が間違っていますか?

ありがとう!

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

knockout.js - ノックアウト パフォーマンス - オブジェクトが観察できない場合、プロパティをバインドできますか?

ツリー ビューを作成するために、テンプレートを介してマップされた大きなネストされた監視可能な配列があります。リストは動的ですが、ツリーには 1000 以上の要素が存在する可能性があります。

このコレクションの読み込みと検索でパフォーマンスの問題が発生しています。特に IE8 と iPad で顕著です。クロムは大丈夫そうです。

コレクション内の要素は実際には変更されないため、オブザーバブルの「通知」の側面は必要ないと思いますが、データバインディングを利用したいと考えています。

観察できないビューモデル内のオブジェクトにデータバインディングを行う方法はありますか? ko.mapping.fromJS() を使用せずに、観測不可能な複雑なデータ コレクションを作成する方法はありますか?

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

asp.net-mvc - Knockout.jsは、オブジェクトの配列を繰り返しにバインドします