0

ko.mapping.fromJS(Model) を使用して、ASP.NET MVC ビューモデルを KnockoutJS にロードしました。

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

public IEnumerable<FunkyThing>funkyThings;
public FunkyThing selectedFunkyThing;

各 FunkyThing には、文字列プロパティ funkyThingName があります。マッピングは正常に機能し、テーブル内のすべてのファンキーなものとその名前を確認できます。

クイック更新ボタンを追加したい。だから私は単純なボタンを作成し、ボタンのクリックをノックアウト関数の更新にデータバインドしました。これは次のようになります。

   model.refresh= function () {
            var url = '@Url.Action(MVC.FunkyThings.RefreshJSON())';
            $.getJSON(url, function (returnedData) {                
                ko.mapping.fromJS(returnedData, {}, model.funkyThings);
            });

refresh 関数が正常に呼び出され、サーバーで RefreshJSON メソッドが呼び出されます。サーバーは JSON データ (更新された funkyThings の配列) を返します。これは、chrome のデバッガーで returnData にカーソルを合わせると、chrome 内で確認できます。

ただし、残念ながら、マッピング関数が呼び出された後、バインディングが壊れます。

不明なエラー: バインドを解析できません。メッセージ: ReferenceError: funkyThingName が定義されていません。バインディング値: テキスト: funkyThingName

そして、なぜだかわからない…?

4

2 に答える 2

1

model.funkyThings観測可能ですか?そうである場合は、関数としてマッピング メソッドに渡すことができます。

ko.mapping.fromJS(returnedData, {}, model.funkyThings());

それができない場合、refresh メソッドによって返される JSON の構造は正しいですか?

JSON 文字列を取得する場合は、マッピング プラグインの fromJSON メソッドを呼び出す必要があります。

ko.mapping.fromJSON(returnedData, {}, model.funkyThings);

ここでも funkyThings の括弧が必要になるかもしれませんが、最初は省略してみてください。

于 2013-03-19T13:51:02.507 に答える
1

返されたオブジェクトが正しい形式であり、バインドが適切に行われている場合は、次のことを行う必要があります。

    model.FunkyThings(returnedData).
于 2013-03-19T14:33:12.787 に答える