2015-01-19 1 views
0

밑줄 1.3.3 및 JQuery 1.7.1이있는 백본 1.1.2를 사용하여 3 개의 값 (x, y 및 z)을 사용하려면이 모델을 모듈 식 접근 방식을 사용하여 컬렉션의 컬렉션 및 컬렉션에 배치합니다. 다음Uncaught TypeError : 컬렉션에 모델을 추가 할 때 '[object Object]'속성이 정의되지 않음을 읽을 수 없습니다.

내 코드입니다 :

<code> 
requirejs.config({ 
    paths : { 
     app : '/app', 
     jquery : ["http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min"], 
     underscore : ["http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.3.3/underscore-min"], 
     backbone : ["https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.2/backbone-min"] 
    }, 
    shim : { 
     jquery : { 
      deps : [], 
      exports : '$' 
     }, 
     underscore : { 
      deps : [], 
      exports : '_' 
     }, 
     backbone : { 
      deps : ['jquery', 'underscore'], 
      exports : 'Backbone' 
     } 
    } 
}); 
</code> 

main.js를 app.js

<code> 
define(function(require) { 

    var DataSet = require('./model/DataModel.js'); 

    var DataCollection = require('./collection/DataCollection.js'); 
    var DataView = require('./view/DataViews.js'); 
}); 
</code> 

DataModel.js

<code> 
define(['jquery', 'underscore', 'backbone'], function($, _, Backbone) { 

    var DataSet = Backbone.Model.extend({ 
     initialize : function() { xVal:0; yVal:0; zVal:0; 
      alert("at model"); 
     }, 

     defaults : { 

      xVal : 0, 
      yVal : 0, 
      zVal : 0 
     } 
    }); 

    return DataSet; 

}); 
</code> 

DataCollection.js 

<code> 
    define(['jquery', 'underscore', 'backbone', '../model/DataModel.js'], function($, _, Backbone, DataSet) { 

    var DataSetCollection = Backbone.Collection.extend({ 
     model : DataSet, 

     view : null, 

     initialize : function() { 

     }, 

     constructor : function() { 
      console.log('Book\'s constructor had been called'); 
     } 
    }); 

    return DataSetCollection; 

}); 
</code> 

DataView.js

<code> 
    define(['jquery', 'underscore', 'backbone', '../collection/DataCollection.js', '../model/DataModel.js'], function($, _, Backbone, DataCollection, DataSet) { 
     // ... , /collection/DataCollection.js 
     DataView = Backbone.View.extend({ 

     tagName : 'li', 

     events : { 
      'click #add-input' : 'getAxisValues', 
     }, 

     initialize : function() { 
      alert("Initializing View"); 
      //this.cars = new CarsCollection; 
      this.dataCollection = new DataCollection; 
      _.bindAll(this, 'render'); 
     }, 

     getAxisValues : function() { 

      /* 
      var xVal = $('#inputX').val(); 
      var yVal = $('#inputY').val(); 
      var zVal = $('#inputZ').val();*/ 

      //adding random values for now for testing 
      var dataSet = new DataSet({ 
       xVal : 4, 
       yVal : 5, 
       zVal : 6 
      }); 
      alert("Adding values to collection " + dataSet.cid); 
      this.dataCollection.push(dataSet); 
     }, 

     render : function(model) { 
      alert("Rendering View"); 

     } 
    }); 
    var view = new DataView({ 
     el : '#FirstShow' 
    }); 
    return view; 
    }); 
</code> 

Project Structure

Router.js 파일이 지금과 같은 비어있는 프로젝트에서 나중에 사용됩니다 5,. 내가 갖는

오류 내 코드에서

Uncaught TypeError: Cannot read property '[object Object]' of undefined      backbone.js:806 
i.extend.get       backbone.js:694 
i.extend.set       backbone.js:638 
i.extend.add       backbone.js:776 
i.extend.push       DataViews.js:32 
Backbone.View.extend.getAxisValues  jquery.min.js:3 
f.event.dispatch      jquery.min.js:3 
f.event.add.h.handle.i     jquery.min.js:3 

이며, 오류가 다음 줄에 :

this.dataCollection.push (와 DataSet);

은 또한 다음과 같은 이전

this.dataCollection.add (데이터 집합을) 시도했다;

감사합니다.

+0

: 정의되지 않은 재산 'C4'를 읽을 수 없습니다 그것은 C1 시작 후 C2 등 : catch되지 않은 형식 오류가 매번 추가 입력 버튼을 클릭하면 새 모델이 만들어졌습니다. 백본의 최신 버전을 사용하면 오류가 언급 된 것과 같습니다. –

답변

0

코드에서 어떤 문제가 있습니다.
1) 3 점 중 하나만 모델을 만들고 있습니다.
2) 컬렉션을 실제로 초기화하지 않았습니다. 코드는 컬렉션에 세 가지 모델을 추가하려면, 그래서 그냥 내가 같은 오류 메시지를 받았습니다

this.dataCollection = new DataCollection([{xVal : 4},{yVal : 5},{zVal : 6,}]) 
+0

나는 그 일을 시도했지만 여전히 작동하지 않습니다. 내가 시도 할 수있는 다른 건 없니? –

+0

동일한 오류가 발생하고 있습니까?, 쉬운 것입니다 피들 제공하십시오. – StateLess

+0

예. 나는 해결 방법을 찾으려고 노력하고있다. 정확히 해결책은 아니다. 바이올린 링크를 게시하고 언젠가는이 대체 접근법을 이해할 때까지 기다리십시오. 감사! –

0

쓰기이

this.dataCollection = new DataCollection(); 


같이해야한다. 내 사건이이 사건과 정확히 같지는 않지만 여기에 해결책을 제시하는 것이 유용 할 수 있습니다.

내 솔루션은 constructor 대신 initialize을 사용하여 모델을 배열에 추가하지 않거나 해당 시간에 정의되지 않은 배열에 모델이 있는지 확인하는 것입니다. 여기

는 차이가있다 : 나는 백본 이전 0.9.2를 사용하고 오류 되니라 What's the difference between initialize and constructor on a backbone model