2012-05-24 4 views
0

я уже определяют использование модели позвоночника:backbonejs не мог работать

window.ResourceModel = Backbone.Model.extend({ 

     default:{ 
      'relativeurl':'unknow', 
      'type': "unkonw" 
     }, 

     initialize: function(){ 

      this.bind("change:relativeurl", function() { 
       console.log('change!',this.relativeurl); 
      }); 

      this.bind("change:type", function() { 

      }); 
     }, 

     setRelativeURL: function (url) { 
      console.log('pass in',url);//this have value 
      this.set({"relativeurl": url});//this's value is undefined! 
     }, 

     delResource: function() { 
      console.log("this.url",this.relativeurl); 
      resourceMasterView.delResourceItem(this.url); 
     } 
    }); 

Затем я хочу вызвать этот метод

window.resourceModel = new ResourceModel(); 
resourceModel.setRelativeURL(url); 
resourceModel.setType(type); 

но просто я комментарий выше, даже я уже ссылаться на множество метод, результат «relativeurl» все еще не определен!

Что не так с моим кодом? Как я могу решить эту проблему?

ответ

2

Чтобы получить доступ к атрибуту relativeurl модели Backbone, вы говорите: m.get('relativeurl'); атрибут не сохраняется как свойство модели так это:

console.log('change!', this.relativeurl); 

всегда будет давать undefined для this.relativeurl. Вы должны сказать:

console.log('change!', this.get('relativeurl')); 

Демо: http://jsfiddle.net/ambiguous/VBQ5h/

Вы также можете получить доступ к атрибуту непосредственно через this.attributes, но обычно вы должны оставить attributes в покое:

console.log('change!', this.attributes.relativeurl); 

Демо: http://jsfiddle.net/ambiguous/y3Q6b/

Ваш реальная проблема, вероятно, путаница между объектом pr Операции и Магистральные атрибуты. Свойства - это поля объекта и доступны как o.some_property или o['some_property']. Магистральные модели касаются главным образом атрибутов, которые хранятся в свойстве модели attributes и доступны через get и изменены с помощью set (и, конечно, fetch, unset и clear). Магистральные модели ничего не знают о свойствах произвольных объектов.

+0

Возможно, стоит упомянуть, что get/set Backbone не получает/не задает «свойства» на объекте модели - он получает/сохраняет «атрибуты» в объекте модели. Я знаю, что это глупо и почти nit-picky, но свойства всегда кажутся «object.someProperty», а документация базовой линии относится к ним как к getter/setter для «атрибутов». – Stephen

+0

@ Stephen: Нет ничего плохого в том, что вы придирчивы к терминологии. Улучшена ли обновленная версия? (Я не злой, я действительно забочусь о ясности :) –

+0

Самое серьезное +1 – Stephen

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