2013-06-26 63 views
2

我有一个基础视图模型如下:的Javascript knockout.js功能覆盖

var myApp = myApp || {}; 

myApp.BaseViewModel = function() { 
    self = this; 
    self.var1 = ko.observable(); 
    self.messageToSay = Function() { 
     alert("in Base view model"); 
    }; 
    self.sayMessage = function() { 
     self.messageToSay(); 
    } 
}; 

而且我从BaseViewModel继承如下一个视图模型:

var myApp = myApp || {}; 

myApp.HomeViewModel = function() { 

    var self = this; 
    ko.utils.extend(self. new myApp.BaseviewModel()); 

    self.messageToSay = Function() { 
     alert("in Home view model"); 
    }; 

}; 

var vm = new myApp.HomeViewModel(); 
ko.applyBindings(vm, vm); 

的问题是,当我执行vm.sayMessage()总是返回“在基本视图模型中”而不是“在主视图模型中”。如何获取HomeViewModel中的messageToSay()方法以覆盖BaseViewModel()中的方法?

感谢 马丁

回答

2

这是你应该执行的传承方式:我希望它能帮助

myApp.HomeViewModel = function() { 

    var self = this; 
    myApp.BaseviewModel.apply(self, [/*BaseViewModel constructor args */]); 

    self.messageToSay = function() { 
     alert("in Home view model"); 
    }; 

}; 

See fiddle