2015-09-17 4 views
2

Я использую Parse внутри приложения Meteor. Вот мой код:Данные не отображаются в шаблоне

HTML:

<body> 
    <div class="container"> 
     <header> 
      <h1 style="color: red;">Meteor & Parse DB Demo</h1> 
     </header> 
     {{>header}} 
    </div> 
</body> 

<template name="header"> 
{{#each alphabets}} 
    <div class="alphabets">{{this}}</div> 
{{/each}} 

JS:

Parse.initialize("appid", "jsid"); 
var list_item=Parse.Object.extend("className"); 
var query=new Parse.Query(list_item); 
var list=[]; 

if (Meteor.isClient) { 
    query.find({ 
    success:function(o){ 
     for (var i = 0; i < o.length; i++) { 
     var object = o[i]; 
     list.push(object.get('name')); 
     console.log(list); 
     } 
     return list; 
    }, 
    error: function(error) { 
     alert("Error: " + error.code + " " + error.message); 
    } 

    }); 
    Template.header.alphabets = function() { 
    return list; 
    }; 
} 
</template> 

данные поступают из базы данных, но проблема заключается в том, что шаблон загружается до прибытия данные:

template.headed.alphabet называется до query.find имеет название

ответ

1

Вот код, который работал для меня я отправляю это так другой может передать его ,

HTML: 

<body> 
<div class="container"> 
    <header> 
     <h1 style="color: red;">Meteor & Parse DB Demo</h1> 
    </header> 
    {{>header}} 
</div> 
</body> 

<template name="header"> 
{{#each alphabets}} 
    <div class="alphabets">{{this.name}}</div> 
{{/each}} 

JS: 

Parse.initialize("appid", "jsid"); 
var list_item=Parse.Object.extend("className"); 
var query=new Parse.Query(list_item); 
var list=[]; 

if (Meteor.isClient) { 
    query.find({ 
    success:function(o){ 
     for (var i = 0; i < o.length; i++) { 
     var object = o[i]; 
     list.push({name:object.get('name')}); 
     console.log(list); 
     } 
     return list; 
    }, 
    error: function(error) { 
     alert("Error: " + error.code + " " + error.message); 
    } 

    }); 
    Template.header.alphabets = function() { 
    return list; 
    }; 
} 
</template> 
2

Сделайте свой список коллекцию на стороне клиента, то тогда будет реактивная и обновить

list = new Mongo.Collection(null); 

затем сделать list.insert(object.get('name'))

Parse.initialize("appid", "jsid"); 
var list_item=Parse.Object.extend("className"); 
var query=new Parse.Query(list_item); 

if (Meteor.isClient) { 
    list = new Mongo.Collection(null); 
    query.find({ 
    success:function(o){ 
     for (var i = 0; i < o.length; i++) { 
     var object = o[i]; 
     list.insert(object.get('name')); 

     } 

    }, 
    error: function(error) { 
     alert("Error: " + error.code + " " + error.message); 
    } 

    }); 
    Template.header.helpers({ 
    alphabets : function() { 
     return list.find({}); 
    } 
    }); 
} 
</template> 
+0

не имеет значения, по-прежнему использует коллекцию клиентской стороны, он не разговаривает с монго, его вещь, называемая minimongo, в этом случае отключается от монго. Он предоставляет реактивные коллекции, которые вы хотите. Это означает, что он будет повторно отображаться при обновлении списка –

+0

nope, без имени класса, если вы укажете ему имя, то он будет считать, что он связан с mongo, но с нулевым значением, как массив, но реактивный, полностью отключенный от mongo –

+0

это означает, что object.get ('name') является объектом .... если у него есть свойства, которые вы хотите отобразить .... –

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