来自JS的Knockoutjs Mapping保留方法

时间:2012-07-20 16:52:06

标签: asp.net-mvc knockout.js knockout-mapping-plugin

我使用KnockoutJs并且很棒,但我需要一件事,我无法理解。

  1. 我发出一个返回JSon数据的get请求。像我的Knockout ViewModel一样的属性。
  2. 我使用映射插件将我的JSon结果转换为Knockout viewModel。
  3. 这很好但是,当然,我失去了我的淘汰视图模型中定义的方法。

    如何防止这种情况,以便我可以使用映射并保留我的方法?

    非常感谢!

    更新

    这只是一个样本。也许有一些语法错误,但它应该显示我想要做的事情。

    我的JavaScript

    var MyViewModel = function () {
        var self = this;
    
        self.id = ko.observable();
        self.subModels = ko.observableArray();
    
        self.doSomething = function () {
            alert("Hello from " + self.id());
        };
    };
    
    var MySubViewModel = function () {
        var self = this;
    
        self.id = ko.observable();
    
        self.doSomething = function () {
            alert("Hello from " + self.id());
        };
    };
    

    我的c#模型

    public class MyViewModel
    {
        public int Id { get; set; }
        public List<MySubViewModel> SubModels { get; set; }
    }
    
    public class MySubViewModel
    {
        public int Id { get; set; }
    }
    

    我的服务器结果

    return new MyViewModel
            {
                Id = 1,
                SubModels = new List<MySubViewModel>
                                    {
                                    new MySubViewModel { Id = 1 },
                                    new MySubViewModel { Id = 2 }
                                    }
            };
    

1 个答案:

答案 0 :(得分:3)

如果您使用的是ko映射插件,则可以将json对象映射到viewmodel中的模型。例如,如果要获取人员列表,则可以将json映射到viewModel.people。这样你就可以保持你的viewmodel的其他属性不受影响。