2013-11-14 7 views
2

У меня есть модель базы нокаута для работы со списками, с общей функциональностью (пейджинг, сортировка и т.д.):Лучшая практика повторного использования нокаута модели

ListViewModel.js:

function ListViewModel() { 
    var self = this; 

    self.Items = ko.observableArray(); 
    // other props and methods 
} 

return ListViewModel; 

Теперь, Я хочу повторно использовать (наследовать) эту модель для конкретного класса UsersListViewModel. Какой лучший способ (принятие к нокауту) сделать это? Создать ListViewModel внутри UsersListViewModel или расширить ListViewModel с новым полем и методами?

Теперь я создал объект ListViewModel внутри UsersListViewModel, но я не люблю это:

UsersListViewModel:

function UsersListViewModel(model) { 
     var self = this; 

     self.List = new ListViewModel(); 
     self.IsInitialized = ko.observable(false); 
} 

return UsersListViewModel; 

ответ

3

В прошлом, когда мы должны были сделать что-то вроде этого, мы используется только применить (http://jsfiddle.net/85TeD/1/):

function UsersListViewModel() { 
    var self = this; 

    ListViewModel.apply(self); 

    self.OtherProp = ko.observable("other"); 

} 

Если вы хотите реализовать полное классическое наследование, это начало: http://www.crockford.com/javascript/inheritance.html

+0

Спасибо, ваше предложение с применением очень хорошее. – alexmac

+0

Применяет ли копирование всех наблюдаемых к пройденной ссылке? – Nishanthan

+1

@Nish Yup, он должен создавать свойства для UsersListViewModel для всех свойств, объявленных в ListViewModel. – pax162

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