2011-08-11 25 views
0

何かを得る使用することはできません。 汎用オブジェクトクラスの定義//BACKBONE.JSはなぜここに奇妙な、私は2つのファイル、base.jsとfilter.jsのコードのこれら2つの部分を持っている親がメソッドに

var baseObject = Backbone.Model.extend({ 
    copy: function(){ 
     _clipBoard=this; 
    }, 
    fetch: function(){ 
     var obj =this; 
     var criteriaString = encodeURI(JSON.stringify({_id:this.get("_id")})); 
     var getUrl = _rootUrl+'/nalab/'+this.getMongoType()+'/'; 
     $.getJSON(getUrl + "_find", 'criteria=' + criteriaString, function(data){ 
      var results = data.results; 
      obj.set(results[0]); 
     }); 
    } 
}); 

//definition of a baseObject subclass called filter with speical methods 
var Filter = baseObject.extend({ 
    getTitleField : function(){ 
     return 'title'; 
    }, 
    getMongoType: function(){ 
     return 'filter'; 
    } 
}); 

は、それから私は、Firefox 5に次のコードを実行します。

だから、
var filter = new Filter({_id:{$oid:"4e43ca017c36ec707b755659"}}); 
filter.fetch(); 
console.log(filter); 
/* 
Firebug shows an object with "attributes" that contains a field 'title'='Filtres avances' 
*/ 
console.log(filter.get('title'); 
/* 
Firebug says undefined 
*/ 

、なぜ「スーパー」はbaseObjectクラスのために働くし、それをoverridことはありませんが、この方法は、Filterクラスでは動作しません取得するのですか?

答えて

1

ajaxリクエストが完了し、データがモデル化される前にtitleを取得しようとしているためです。 データを取得する場合は、次のように入力してください。

var filter = new Filter({_id:{$oid:"4e43ca017c36ec707b755659"}}); 
filter.bind('change', function(model) { 
    console.log(model.get('title'); 
}); 
filter.fetch(); 
関連する問題