2

マッピングプラグインを使用してobservableArrayの一部としてアイテムを更新しようとすると問題が発生します。

私は次のコードを持っています

accounts.list = ko.mapping.fromJS(@(Html.Raw(Model.AccountsJSON)));

私はこれを使用してテーブルにバインドしています

<tbody data-bind="foreach: list"> ... </tbody>

これはすべて正しく機能します、そして私は次の機能を持っています

$('#datatable').delegate(".cancelLock", "click", function() {
        var item = ko.contextFor(this).$data;
        var param = {AccountNumber : item.AccountNumber()}
        $.post('@Url.Action("cancellock","accounts")',param,function(result){
            ko.mapping.fromJSON(result,item);
            if(accounts.lockeditem() == item){
                accounts.lockeditem(0);
            }
        });
    });

この行ko.mapping.fromJSON(result,item);はエラーを引き起こさず、関数は続行されますが、observableが更新されることはありません。

コードをに変更してko.mapping.fromJSON(result,accounts.list);(そして完全なリストを返すようにコントローラーを更新して)、これは正しく機能します-問題は、テーブル全体を更新したくないということです。「単に」「アイテム」を元に戻したいのです。元の状態に。

また、(updatedはオブジェクトのプロパティの1つです)を使用してみましたitem.Updated(result.Updated);が、これは期待どおりに機能しますが、必要がない限り、すべてのプロパティでこれを手動で呼び出すことはしません。

使用することは可能ko.mapping.fromJSON(result,item);ですか(またはそのバリエーション)?私は愚かなことをしているのですか?

前もって感謝します。

4

2 に答える 2

4

私があなたの意図を誤解しない限り、「更新ターゲットの指定」のマッピングドキュメントko.mapping.fromJSに記載されているバリエーション(またはfromJSON)を使用してこれを行うことができます。だから私はあなたがこれを望んでいると思います:

ko.mapping.fromJSON(result, {}, item); 

これがフィドルです:http://jsfiddle.net/kR4jc/

于 2012-07-30T20:14:05.397 に答える
0

rawgithub.com と最新の knockout.js ファイルを参照するようにフィドルを更新しました。

http://jsfiddle.net/kR4jc/5/

https://rawgithub.com/SteveSanderson/knockout.mapping/master/build/output/knockout.mapping-latest.debug.js
http://knockoutjs.com/downloads/knockout-2.2.1.js

この投稿も役に立ちました https://github.com/SteveSanderson/knockout.mapping/issues/41

于 2013-06-07T16:49:49.820 に答える