簡體   English   中英

如何覆蓋默認的骨干網模型?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM