2013-03-15 2 views
0

Я пытаюсь контролировать, какие данные должны быть сериализованы, прежде чем отправлять его обратно на мой сервер. Для этого:prototype не определено

viewModel.prototype.toJSON = function() { 
    var copy = ko.toJS(this); 
    delete copy.QuoteListViewModel; 
    return copy; 
}; 

Но прототип не определен, и он терпит неудачу.

ViewModel создается mvcKnockout и не существует, потому что я могу сделать что-то вроде:

viewModel.QuoteSelectedViewModel = ko.observable(); 

Так почему прототип не определен?

+2

Что такое viewmodel? Это просто объект JS, или это функция? Прототип относится только к функциям, я считаю, а не к прямому JS-объекту. –

+0

Является ли конструктор объявленным перед попыткой добавить к прототипу? – Wryte

+0

@Paul hum, на самом деле вы правы, viewModel определяется как: var viewModel = ko.mapping.fromJS (viewModelJs); Как я могу удалить свойство перед отправкой на сервер? – Sam

ответ

1

Прототип относится только к функциям, я считаю, а не к прямым объектам JS, поэтому я собираюсь предположить, что ваша модель представления не объявлена ​​как функция.

Чтобы ответить на этот вопрос в свой комментарий, чтобы удалить свойство перед отправкой на сервер, посмотрите на раздел в mapping plugin documentation на картографирования с использованием ignore map, который, скорее неудивительно, игнорировать свойства, рассказывающие его при копировании модели представления в объект JS.

+0

Я вижу, что я могу игнорировать свойства при вызове ko.fromJS, но, похоже, это невозможно сделать другим способом, то есть при вызове ko.toJS. По крайней мере, документация не совсем понятна. Вы уверены, что я могу игнорировать свойства при обратном обращении к объекту JS? – Sam

+0

С каких пор '.prototype' не применяется к каждому типу? Или это что-то особенное с нокаутом, о котором вы говорите? – Ian

+0

@ user1098555 Вам нужно использовать плагин сопоставления, как я уже упоминал, а не метод ko.toJS. –

0

Зачем вам копировать объект и delete собственности, а вы можете ignore it during the mapping? Вот простой пример:

function viewmodel() { 
    var self = this; 

    this.ignore = ko.observable("ignore"); 
    this.copy = ko.observable("copy"); 

    this.toJS = function() { 
     var mapping = { 
      'ignore': ["ignore", "toJS"] 
     } 

     return ko.mapping.toJS(self, mapping); 
    }; 
}; 

var vm = new viewmodel(); 
ko.applyBindings(vm); 

console.log(vm.toJS()); 

JSFiddle.

Смежные вопросы