2013-08-22 4 views
1

Я пытаюсь создать простую 2D-игру, изучая Магистраль, и у меня возникают трудности с тем, как работает наследование. Почему в EntityModel не заданы значения по умолчанию? Выход из тика() всегда:Атрибуты по умолчанию не установлены на унаследованной модели в Backbone

x: undefined 
y: undefined 

упрощенный код:

$(function(){ 

EntityModel = Backbone.Model.extend({ 

    defaults: function(){ 
     return { 
      x : 0, 
      y : 0 
     }; 
    }, 

    tick: function(){ 
     console.log('x: ' + this.get('x')); 
     console.log('y: ' + this.get('y')); 
    } 

}); 

PlayerModel = EntityModel.extend({ 

    defaults: function() { 
     return { 
      name : 'John Doe', 
      health : 10 
     }; 
    }, 

    initialize: function(options){ 
     console.log('New player ('+this.get('name')+') entered the game'); 
    } 

}); 

var player1 = new PlayerModel(); 

var gameloop = window.setInterval(function(){ 
    player1.tick(); 
}, 40); 

}); 

ответ

2

defaults декларация в PlayerModel маскирует декларации делается в родительском классе. Вы должны явно включать значения по умолчанию от EntityModel. Например:

var PlayerModel = EntityModel.extend({ 
    defaults: function() { 
     var defaults_parent = _.result(EntityModel.prototype, 'defaults'), 
      defaults_self = { 
       name : 'John Doe', 
       health : 10 
      }; 

     return _.defaults(defaults_self, defaults_parent); 
    } 
}); 

и демо http://jsfiddle.net/nikoshr/epCsy/

+0

Отлично! Большое спасибо :) – o01

 Смежные вопросы

  • Нет связанных вопросов^_^