Knockoutjs Сопоставление методов сохранения JS

Я использую KnockoutJs, и это здорово, но мне нужна одна вещь, и я не могу в этом разобраться.

  1. Я делаю запрос на получение, который возвращает данные JSon. Те же свойства, что и у моего Knockout ViewModel.
  2. Я использую плагин сопоставления, чтобы преобразовать результат JSON в модель представления Knockout.

Это отлично работает, но, конечно, я теряю методы, определенные в моей нокаутирующей модели представления.

Как предотвратить это, чтобы я мог использовать отображение и сохранить свои методы?

Большое спасибо!

Обновлять

Это всего лишь образец. Возможно, есть какие-то синтаксические ошибки, но это должно показать, что я пытаюсь сделать.

Мой 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());
    };
};

Мои модели С#

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 }
                                }
        };

person dknaack    schedule 20.07.2012    source источник
comment
Можете ли вы показать нам, как вы делаете сопоставление или ссылку на jsfiddle?   -  person frennky    schedule 20.07.2012
comment
jsfiddle на самом деле невозможен. Я пробовал ko.mapping.fromJSON и ko.mapping.fromJS. Вопрос в том, как это сделать правильно.   -  person dknaack    schedule 20.07.2012
comment
одним из вариантов будет повторное применение привязки модели каждый раз, когда вы изменяете данные модели с помощью любого сопоставления ko.mapping.fromJS.   -  person ashraf    schedule 21.07.2012


Ответы (1)


Если вы используете плагин сопоставления ko, вы можете сопоставить объект json с моделью внутри модели представления. Например, если вы получаете список людей, вы можете сопоставить json с viewModel.people. Таким образом, вы можете сохранить другие свойства вашей модели просмотра нетронутыми.

person John Papa    schedule 20.07.2012
comment
Хорошо, верно. Но что мне делать, если я хочу, чтобы у модели людей был метод? myViewModel.people[0].someMethod() - person dknaack; 20.07.2012
comment
OK. Можете ли вы поработать над скрипкой, и я могу показать вам несколько вариантов? - person John Papa; 20.07.2012
comment
Готово, надеюсь, вы понимаете мою проблему. Заранее большое спасибо. - person dknaack; 20.07.2012
comment
Вот тот же вопрос, на который ответил Р.П.Нимейер. stackoverflow.com/questions/8401799/ - person John Papa; 21.07.2012