2

いくつかの簡単な手順で、KOをasp.netmvcでうまくプレイできるようになりました。

  1. var jsonModel = @Html.Raw(Json.Encode(Model));
  2. model = ko.mapping.fromJS(jsonModel);
  3. ko.applyBindings(model);

これで、サーバーサイドモデルをKOバインディングで直接使用できるようになりました。

<input type="text" data-bind="value: Name" />

メインモデルを拡張したい場合、それは非常に簡単です:

    model.blurevent = function(o,x) {
        var src = x.srcElement;
        alert(src.value);
    };

次に、モデルのサブクラスを拡張したいと思います。たとえば、私のモデルには、Employersコレクションを持つResumeクラスがあります。Employerクラスにクライアントサイドイベントを追加したいと思います。

したがって、これが純粋なjavascriptソリューションである場合、次のようなことができます。

function Employer() {
    this.ShowDetais = function() { this.DetailsVisible(true); }
}

ただし、モデル全体(上記の#1)をサーバーからシリアル化しているため、Employerは定義されていません。代わりに、シリアライザーは匿名のコレクションを作成するだけです。

model = {
"Resume" : {
  ...
  "Employers": [
  {
    "ResumeEmployerID": 0,
    "Name": "Employer 1",
    "Title": null,
    "EmployedFrom": "\/Date(-62135578800000)\/",
    "EmployedTo": null,
    "GeneralDescription": null,
    "ProjectHighlights": {

    }
  }
 }

ご覧のとおり、デフォルトのjsonシリアライザーでは、モデルで使用される各クラスを個別に定義する必要がないため(純粋なJavaScriptアプリでこれを行う方法)、クライアントでサブクラスを拡張する方法はありません。

これが解決されたかどうか疑問に思いますか?より拡張可能な、より正式なモデルを作成するシリアライザーはありますか?

4

1 に答える 1

1

このプラグインはうまくいけばあなたのニーズを満たすと思います

ノックアウトマッピング

オブジェクトを深くマッピングする必要があります

この質問には良い例があると思いますか?Knockout.jsとマッピングプラグインは深く翻訳されていません

于 2013-02-10T19:26:34.017 に答える