backbone.js - нет модели наследования после восстановления из localStorage - PullRequest
1 голос
/ 02 марта 2012

После восстановления моей коллекции из localStorage перезаписанные методы (getLabel () в следующем примере) больше не вызываются. Вместо этого вызывается базовый метод. Я думаю, проблема в том, что я говорю коллекции использовать BaseModel. Но как изменить коллекцию для работы с моделями KeywordLog и CommentLog?

Я использую следующую модель наследования:

var BaseLog = Backbone.Model.extend({   
    defaults: {
        timecode: null,
        color: null,
        isRange: false,
    },  
    getLabel: function() {
        return 'base';
    }
});

var KeywordLog = BaseLog.extend({   
    defaults: _.extend({}, BaseLog.prototype.defaults, {
        keyword: null,      
    }),     
    getLabel: function() {
        return 'keyword';
    }
});

var CommentLog = BaseLog.extend({   
    defaults: _.extend({}, BaseLog.prototype.defaults, {
        text: null,     
    }), 
    getLabel: function() {
        return 'comment';
    }
});

var Loglist = Backbone.Collection.extend({
    // This might be the problem after restoring drom localStorage..? 
    model: BaseLog,
    localStorage: new Store("storage")
});     

1 Ответ

0 голосов
/ 02 марта 2012

Коллекции будут работать только с одним типом модели.Я предлагаю вам перейти на одну модель и включить label в качестве атрибута.

var Log = Backbone.Model.extend({   
    defaults: {
        timecode: null,
        color: null,
        isRange: false,
        label: 'base',
        text: null
    },
    initialize: function() {
      _.bindAll(this);
    },
    getLabel: function() {
        return this.label;
    }
});

log = new Log;
log.set({ text: 'keyword here', label: 'keyword' })
log2 = new Log;
log2.set({ text: 'comment here', label: 'comment' })
...