2012-10-22 2 views
2

У меня есть следующие модели:доступа статическое свойство от дефолтов

var User = Backbone.Model.extend({ 
      defaults: { 
       status:  this.constructor.status.OFFLINE, 
      }, 
     }, 
     { 
      status: { 
       OFFLINE: 0, 
       ONLINE: 1, 
       BUSY: 2, 
       AWAY: 3, 
      }, 
     } 
    ); 

Я также попытался:

status:  User.status.OFFLINE 

, но я получаю эту ошибку:

TypeError: 'undefined' is not an object (evaluating 'this.constructor.status.OFFLINE') 

или это:

TypeError: 'undefined' is not an object (evaluating 'User.status') 

Любая помощь? Спасибо

+0

Не уверен, что вы понимаете, но вы передача второго объекта в модель пользователя, которая содержит статус свойства, который является вторым объектом (другими словами, статус не является собственностью пользователя. а скорее переданный объект). Кроме того, я не видел никакого примера создания Модели таким образом (передавая второй объект), откуда вы взяли это? – Jack

+0

Вы понимаете, что в вашем коде есть избыточные запятые, что означает, что ваш код просто отбрасывается в IE? –

ответ

3

Вы пытаетесь ссылаться на статическое свойство, которое не определено в момент создания вашей модели пользователя.

Либо определять значения по умолчанию в качестве функции

var User = Backbone.Model.extend({ 
    defaults: function() { 
     return {status: User.status.OFFLINE} 
    } 
}, { 
    status: { 
     OFFLINE: 0, 
     ONLINE: 1, 
     BUSY: 2, 
     AWAY: 3 
    } 
}); 

http://jsfiddle.net/nikoshr/6XuC8/

или определить первые статические свойства, а затем продлить User.prototype добавить свои значения по умолчанию:

var User = Backbone.Model.extend({}, { 
    status: { 
     OFFLINE: 0, 
     ONLINE: 1, 
     BUSY: 2, 
     AWAY: 3 
    } 
}); 

_.extend(User.prototype, { 
    defaults: { 
     status: User.status.OFFLINE 
    } 
}); 

var u = new User(); 
console.log(u.get('status')); 

http://jsfiddle.net/nikoshr/6XuC8/2/

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