[英]How do i overwrite the default Backbone Model?
我想覆蓋默認的Backbone Model變量(Backbone.Model),以使用我自己的自定義驗證方法(isValid,validate)並添加一些屬性。
_.extend(Backbone.Model, {
isValid: function() { // custom function },
validate: function() { // custom logic }
});
var myModel = Backbone.Model.extend({
// this adds for example properties to my modified Backbone model.
});
不幸的是,這不起作用...當我用requirejs加載“包裝器,擴展”模塊並創建一個新的Model實例,然后調用validate時。 它說它不知道任何驗證功能...
您必須擴展Backbone.Model.prototype
而不是Backbone.Model
本身,因為所有方法都是構造函數的原型方法,而不是模型的屬性。 盡管創建一個擴展Basebone.Model的自定義BaseModel並實現自定義邏輯可能是更好的主意,以便在更新主干網等情況下避免可能的沖突,即使在這種情況下它們不太可能仍被認為是更好的沖突。練習擴展基本Backbone類,而不要對其進行修改。
我更喜歡為項目做自定義模型,而不是不是OOP的“覆蓋”。 (方法的最后可能是相同的,但是如果我們嘗試模仿OOP,我覺得這更容易理解)。
檢查我的示例,我定義了YourAbstractModel,它是Backbone.Model的擴展,然后我所有的Models都對該抽象模型進行了擴展,而不是Backbone Model。
var YourProject = {};
YourProject.YourAbstractModel = Backbone.Model.extend({
customProperty1 : null,
customProperty2 : null,
isValid : function(){ },
specificUtility : function(){ }
});
var YourModel1 = YourProject.YourAbstractModel.extend({
customProperty1 : 'aaaaa'
});
var YourModel2 = YourProject.YourAbstractModel.extend({
customProperty1 : 'bbbbb'
});
console.log( new YourModel1().customProperty1 );
console.log( new YourModel2().customProperty1 );
我的方法也很靈活,可以擁有多個抽象模型,並且不會與Backbone的更新沖突,而且我覺得它更接近可繼承的過程。
您可以使用thedersen https://github.com/thedersen/backbone.validation的Backbone.Validation插件
它非常有用並且易於使用。 您還可以將視圖綁定到模型,以便您的視圖具有針對特定模型屬性的custom-error屬性,該屬性未通過驗證。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.