5

콜렉션을 모델링하기 위해 뷰에서 값을 가져오고 싶습니다. 콜렉션을 사용할 때 모델에 값을 전달할 수 있습니다. .i .i는 어디에서 문제가되는지 모르겠습니다. 내 코드입니다.값을 전달하는 방법 backbone.js의 컬렉션에서 모델

내 모델

var PostwallModel=Backbone.Model.extend({ 

    urlRoot: 'http://localhost:3400/post', 
    idAttribute: '_id', 
    defaults : { 
     userId: '', 
     userName: " ", 
     postmsg : "unknown" 
    }, 

    initialize: function() { 
     console.log("<><><>post model initialize<><><><><>"); 
    }, 

    // Delete item (row) from 
    clear: function() { 
     this.destroy(); 
    } 

}); 

내 컬렉션

여기에 콘솔에서 점점 내가 생각
var PostwallCollection = Backbone.Collection.extend({ 
    url: 'http://localhost:3400/post', 
    model: PostwallModel 
}); 

**here is my view** 

var PostwallView = Backbone.View.extend({ 

    el: $("#page"), 
    template: _.template(PostwallTemplate), 

    events: { 
     'click #postinwall'  : 'submitpost', 
    }, 

    initialize: function() { 
     console.log("_______postmodel"); 
     this.model = new PostwallModel(); 
     var obj= new PostwallModel(); 
     obj.set({userId:'123',userName:"str ji",postmsg:'the post is here'}); 
     console.log(obj.get('postmsg')); 
     obj.toJSON(); 

     console.log(JSON.stringify(obj)); 

     // console.log(obj.get('userName')); 

     var collection = new PostwallCollection(); 

     _.bindAll(this, 'submitpost'); 

     console.log(collection); 
     collection.add(obj,{id:1}); 
     console.log("collection"+collection); 
     console.log("collection fetch value "+JSON.stringify(collection.fetch())); 
     this.render(); 
    }, 

    render: function() { 
     alert(" render function"); 
    }, 

    submitpost: function(e) { 
     //Save post model to server data 
     e.preventDefault(); 
     var post_data = JSON.stringify(this.getFormData(this.$el.find('form'))); 
     // 
     //this.model.save(post_data); 
     this.model.set(post_data); 
     this.collection.add(this.model); 
     return false 
    }, 

    //Auxiliar function 
    //how to get data from textarea 

}); 

----> [], 컬렉션을 가져 값 [개체 개체], 문제는 어디에 있으며 값을 저장하고 가져 오는 방법은 무엇입니까?

+1

아시다시피 .fetch()가 비동기 작업입니까? console.log ("콜렉션 가져 오기 값"+ JSON.stringify (collection.fetch())); 작동하지 않을 것이다. Jsbin 예제에 도움을 줄 수 있습니까? –

+0

나는 당신이 좀 더 많은 정보를 줄 수 있겠습니까? @VasilVanchuk – Sport

+1

그건 내가 말하는 것에 대한 것입니다 : collection.fetch()는 콜렉션 데이터를 반환하지 않습니다. 가져 오기가 http 요청을 만들어서 데이터가 성공적인 처리 응답. 따라서 console.log ("collection fetch value"+ JSON.stringify (collection.fetch()))와 같이 작성하십시오. 당신은 콜렉션 데이터를 보지 못할 것이다. –

답변

1

이 시도 :

var self = this; 
collection.fetch()({ 
    success: function (data) { 
     console.log("collection fetch value "+data); 
     self.render(); 
    } 
}); 

당신은 당신의 인출이 성공되면에만 렌더링 실행합니다. fetch 메소드는 비동기 적으로 실행됩니다. 이것은 fetch 메소드가 여전히 그 일을하는 동안 계속 실행하려고 시도한 후에 모든 것을 의미합니다. 성공 콜백에 render 메소드를 배치하면 실제로 해당 데이터를 가질 때까지는 콜렉션 데이터를 사용하려고 시도하지 않습니다.