2012-11-14 36 views
0

我有一個使用knockout.js和require.js庫的wep應用程序。假設我有'用戶'模型和'客戶'模型。我想客戶模式從用戶繼承,所以我現在有下面的代碼:使用requirejs定義模型繼承

user.js的

define(['knockout'], function(ko){ 

    return function User(){ 

     var self = this; 
     self.id = ko.observable(); 
     self.firstname = ko.observable(); 
     self.name = ko.observable(); 
    }; 
}); 

Customer.js

define(['knockout', 'model/user'], function(ko, User){ 

    return function Customer(){ 

     var self = this; 
     self.address = ko.observable(); 
    }; 
    Customer.prototype = new User(); 
}); 

當我創建具有以下一個客戶代碼:

var c = new Customer(); 
c.id(1); 
c.firstname("John"); 
c.name("Doe"); 
c.address("Unknown"); 

然後我得到在Chrome控制檯以下錯誤:

Uncaught TypeError: Object #<Customer> has no method 'id' 

當我只設置地址屬性,我沒有看到這個錯誤,所以我假設繼承有問題。任何幫助是非常受歡迎的。

回答

1

下面一行將永遠不會被執行,因爲你使用之前返回:

Customer.prototype = new User(); 

更新customer.js這樣:

define(['knockout', 'model/user'], function(ko, User){ 

    function Customer(){ 

     var self = this; 
     self.address = ko.observable(); 
    }; 
    Customer.prototype = new User(); 
    return Customer; 
}); 
+0

+1完美解決,非常感謝你! –

+0

@BramW。它可能不是一個完美的解決方案。檢查這個問題:http://stackoverflow.com/questions/10520400/knockout-issue-with-prototypical-inheritance – nemesv

+0

@nemesv爲什麼這個解決方案會更適合我的情況? –