2013-11-01 131 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