2013-04-25 1 views
1

Редактировать: Оказывается, моя проблема была ошибкой ID10T. Я скопировал одно из определений конкретного класса, но забыл изменить имя. JavaScript счастливо позволяет мне переопределить объект без каких-либо методов, связанных с нокаутом. D'Oh!Наследование нонаут плюс сопоставление

Этот вопрос основывается на ответе на другой Knockout/inheritance question. Используя ответ на этот вопрос, я смог создать базовую иерархию. Тем не менее, я хочу использовать плагин отображения, как обычно, с объектными данными. Однако, когда я пытаюсь использовать сопоставление, мой дочерний класс нокаута не ведет себя так, как должен.

Вот срубить немного кода:

tubs.Gen2Event = function (data) { 
    var self = this; 
    //...Set a bunch of props... 
    return self; 
} 

tubs.Gen2LandedEvent = function (data) { 
    var self = this; 
    ko.utils.extend(self, new tubs.Gen2Event(data)); 
    // If I exclude the following mapping call, the object is fine 
    ko.mapping.fromJS(data, {}, self); 
    //...Other methods that worked fine before mapping... 
} 

Я знаком с пользовательским отображением, но от того, что я могу найти, кажется, что это означало для тонкой настройки дочерних свойств, не модифицируя цельные объект.

ответ

0

Я хотел бы использовать реальное наследство прототип, если я где вы, например

http://ejohn.org/blog/simple-javascript-inheritance/

http://jsfiddle.net/4Kp3Q/

Person = Class.extend({ 
    init: function(data){ 
     this.firstname = ko.observable(); 
     this.lastname = ko.observable();  
     ko.mapping.fromJS(data, {}, this); 
    } 
}); 

Employee = Person.extend({ 
    init: function(data){ 
     this.salary = ko.observable();  
     this._super(data); 
    } 
}); 

var data = { firstname: "foo", lastname: "bar", salary: 200000 }; 
ko.applyBindings(new Employee(data));