2013-11-01 102 views
0

请看下面的代码。它是一个使用一些下划线功能的Backbone/Parse代码。 我想遍历一个Parse类来检索该类中所有对象的“firstName”属性。 我有2个问题。 正如评论所指出的那样,第一个名称正确地检索了名字,但它重复了它们。所以如果有5个对象,它将检索5个firstName * 5。这里有一个迭代问题。这与控制台日志一起显示。返回取回值

第二个问题是,我尝试将firstName值推入数组中,然后将其返回,以便稍后在代码中使用testt变量。但用控制台日志检查测试内容将发送消息而不是名字列表。 你是否看到了如何解决这个问题?

var DoopizCollection = Parse.Collection.extend({ 
     model: Subscribers 

    } 
); 
var doopizlist = new DoopizCollection(); 
var testt; 
testt = doopizlist.fetch({ 
    success: function(doopizlist) { 
     var results = []; 
     doopizlist.each(function(object) { 
      results.push(doopizlist.pluck('firstName')); 
      console.log(doopizlist.pluck('firstName')); // logs 2 duplicate arrays 
     }); 

     return results; 
    }, 
    error: function(doopizlist, error) { 
     console.log("error"); // The collection could not be retrieved. 
    } 
}); 
console.log(testt); // logs "a b.promise...." message instead of firstNames 

回答

1

的重复问题,是因为你与eachpluck遍历doopizlist两次,一次又一次。 Pluck基本上是map方法的简写。

第二个问题是,您所期待testt是所得到的值,而实际上它是jqXHR一个实例,这是一些被称为一个承诺。因此,您可以使用then方法记录结果的值。

var DoopizCollection = Parse.Collection.extend({ 
     model: Subscribers 

    } 
); 
var doopizlist = new DoopizCollection(); 
var testt; 
testt = doopizlist.fetch({ 
    success: function(results) { 
     return results.pluck('firstName'); 
    }, 
    error: function(results, error) { 
     console.log("error"); // The collection could not be retrieved. 
    } 
}); 

testt.then(function(results) { 
    console.log(results); 
}); 
+0

非常感谢,你知道我在哪里可以学到更多关于这个承诺的行为吗? – Benj

+0

当然,承诺并不仅限于Backbone.js。你会发现很多JavaScript库(如jQuery)利用promise。以下是我在Google上找到的链接:http://blog.parse.com/2013/01/29/whats-so-great-about-javascript-promises/如果您没有找到特别有用的方法,请尝试使用Google搜索功能“Javascript Promises “或”Javascript延期“。 – Johnny

+0

感谢但关于第二个问题:testt.then记录对象对象。似乎它不能真正访问上面返回的值。我不知道为什么。 – Benj