2013-02-10 143 views
2

我已经得到KO几个简单的步骤,发挥好与asp.net的MVC机智扩展Knockout.js视图模型:在asp.net MVC应用程序

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

瞧,我现在可以直接在KO绑定中使用我的serverside模型。

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

如果我想延长主模型,这是非常简单的:

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

接下来,我想扩展模型的子类。例如,我的模型有一个拥有雇主集合的Resume类。我想将客户端事件添加到雇主类。

所以,如果这只是一个纯JavaScript的解决方案,我可以做这样的事情:

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

,但是,因为我序列化从服务器整个模型(#1以上),用人单位没有定义。相反,串行只是创建一个匿名收藏:

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

    } 
    } 
} 

正如你看到的,默认JSON序列,它并没有刻意去定义模型分别使用每个类(一个会做这样的方式纯JavaScript应用程序),所以无法在客户端上扩展子类。

我想知道这是否已解决?有没有一个序列化器可以创建更加可扩展的更正式的模型?

回答

1

我觉得这个插件将有望满足您的需求

Knockout Mapping

应该深映射你的对象

这个问题已经一个很好的例子,我认为? Knockout.js and mapping plugin not deep translating

+1

我正在使用这个插件。这就是“model = ko.mapping.fromJS(jsonModel);”是..仍然没有看到一个直接的方式来扩展子模型。我看到文档确实触及了自定义对象创建..我将不得不深入了解一下 – 2013-02-10 19:38:40

+1

好的我在“使用自定义对象构造”中看到创建“”部分,我可能可以完全按照我的需要进行操作。今天晚些时候会做一些概念验证,谢谢。 – 2013-02-10 19:45:23