いくつかの簡単な手順で、KOをasp.netmvcでうまくプレイできるようになりました。
var jsonModel = @Html.Raw(Json.Encode(Model));
model = ko.mapping.fromJS(jsonModel);
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アプリでこれを行う方法)、クライアントでサブクラスを拡張する方法はありません。
これが解決されたかどうか疑問に思いますか?より拡張可能な、より正式なモデルを作成するシリアライザーはありますか?