2

Я создаю веб-страницу, чтобы показать недавние пожертвования всех пользователей приложения на основе анализа. Я создаю это из примера приложения Todo, которое можно найти здесь: https://parse.com/tutorials/todo-app-with-javascript. Вот код в моем основном .js файла (который в основном отражает учебник todo.js, кроме замененных имен классов и такого):Объекты Full Parse недоступны для шаблона поддерева

//Donation Model 
//-------------- 
var Donation = Parse.Object.extend("Donation", { 
    //instance methods 
    //Default attributes 
    defaults: { 
    }, 

    //Ensure that each donation created has content 
    initialize: function() { 
    } 
}); 


// This is the transient application state, not persisted on Parse 
var AppState = Parse.Object.extend("AppState", { 
    defaults: { 
     filter: "all" 
    } 
}); 

//Donation Collection 
//------------------- 

var DonationList = Parse.Collection.extend({ 
    model: Donation 

}); 

//Donation Item View 
//----------------- 

var DonationView = Parse.View.extend({ 
    tagName: "tr", 
    template: _.template($('#donation-template').html()), 

    //The DOM events specific to donation 
    events: { 

    }, 

    initialize: function() { 
     _.bindAll(this, 'render'); 
     this.model.bind('change', this.render); 
    }, 

    render: function() { 
     $(this.el).html(this.template(this.model.toJSON())); 
     return this; 
    } 

}); 


//The Application 
//--------------- 

var AdminView = Parse.View.extend({ 
    el: ".content", 
    initialize: function() { 
     var self = this; 
     _.bindAll(this, 'addOne', 'addAll', 'render'); 
     this.$el.html(_.template($('#admin-template').html())); 

     ////create out collection of donations 
     this.donations = new DonationList; 

     //setup the Parse query 
     var query = new Parse.Query(Donation); 
     query.include("user"); 
     query.include("charity"); 
     query.include("business"); 
     this.donations.query = query; 
     this.donations.bind('add', this.addOne); 
     this.donations.bind('reset', this.addAll); 
     this.donations.bind('all', this.render); 

     this.donations.fetch({ 
      success: function(donations) { 
       for(var i = 0; i < donations.length;i++) { 
        console.warn(donations.models[i]); 
       } 
      } 
     }); 
     state.on("change", this.filter, this); 
    }, 

    render: function() { 
     this.delegateEvents(); 
    }, 
    filter: function() { 
     this.addAll(); 
    }, 
    addOne: function(donation) { 
     var view = new DonationView({model: donation}); 
     this.$("#donation-list").append(view.render().el); 
    }, 
    addAll: function(collection, filter) { 
     this.$('#donation-list').html(""); 
     this.donations.each(this.addOne); 
    } 
}); 


//The main view for the app 
var AppView = Parse.View.extend({ 
    // Instead of generating a new element, bind to the existing skeleton of 
    //the App already present in the HTML. 
    el: $("#adminapp"), 

    initialize: function() { 
     this.render(); 
    }, 

    render: function() { 
     new AdminView(); 
    } 
}); 

var state = new AppState; 
new AppView; 

Когда модели выбираются из Parse в

this.donations.fetch({ 
      success: function(donations) { 
       for(var i = 0; i < donations.length;i++) { 
        console.warn(donations.models[i]); 
       } 
      } 
     }); 

У меня есть все отношения с указателями пожертвования в полном объеме, такие как пользователь и все их свойства, а также благотворительность и все его свойства и т. Д. Однако я заинтересован в отображении имени пользователя, сделавшего пожертвование в underscore, но в этот момент пользовательский объект пожертвования больше не имеет свойства имени пользователя. Это как если бы некоторые свойства удалялись между тем, как возвращается запрос, и когда шаблону предоставляется новая коллекция пожертвований. Вот шаблон подчеркивание:

<script type="text/template" id="donation-template"> 
    <td><%= donationAmount %></td> 
    <td><%= charity %></td> 
    <td><%= user %></td> 
    <td><%= business %></td> 
    <td><%= createdAt %></td> 
</script> 

donationAmount и createdAt отображаются, как и ожидалось, но благотворительность, пользователь и бизнес просто отображается как [объект Object], и я не могу получить доступ к любому из их свойств с помощью точечной нотации. Как я могу убедиться, что свойства, которые мне нужны во всех этих отношениях указателя, доступны для потребления по представлению подчеркивания?

+0

Читать Синтаксическую JS SDK Docs о том, как заполнять указатели и отношения. По умолчанию они не заполняются – charlietfl

+0

Не предполагается ли это выполнение? Я могу увидеть все свойства объекта, если я зарегистрирую их в блоке успеха запроса, но после этого они, кажется, недоступны после этого. – mike

ответ

0

настроить UserList как коллекция модели

return Parse.Collection.extend({ 
     model: User 
}); 

сделать «отношение» запрос и установить локальную модель/вар

this.collection = new UserList(); 
    this.model = this.options.model; 

    var relation = this.model.relation("users"); 
    this.collection.query = relation.query();  
    var user = this.model.id; 
    var username = this.model.get("name"); 
    this.collection.fetch(); 
+0

Извините, я не уверен, где вы предлагаете разместить этот код. Не могли бы вы рассказать об этом немного? Спасибо за помощь – mike

+0

хорошо. образец кода выполняется с помощью метода парсера/марионетки/доступа к проекту. В реляционном запросе (доступ запроса через отношение или указатель на пользователя). Если вы используете структуру MVC с коллекциями, я подумал, что это может дать некоторую идею. –

+0

Спасибо! Я рассмотрю пример кода. – mike