2011-12-08 79 views
0

我在我的Backbone集合中獲取如下。Backbone.js - 打印出收集和collection.model給出不同的結果

var Items = Backbone.Collection.extend({ 
    get_items:function(data) { 
    this.fetch({ 
     data:data, 
     success:function() { 
     console.log(items); 
     } 
    }); 
    }); 
} 

var items = new Items(); 
items.get_items({id:1}); 
items.get_items({id:2}); 

在每個console.log語句中,我期望集合的內容不同,因爲我給了不同的參數。但在Chrome中,無論我給出什麼「id」值,集合的內容都不會改變。

但是,如果我這樣做

var Items = Backbone.Collection.extend({ 
    get_items:function(data) { 
    this.fetch({ 
     data:data, 
     success:function() { 
     console.log(items.models); 
     } 
    }); 
    }); 
} 

var items = new Items(); 
items.get_items({id:1}); 
items.get_items({id:2}); 

,我專門打印輸出「items.models」,我可以看到的收集型號列表確實已經改變。

這是怎麼回事?

回答

1

你在這裏描述了兩種不同的場景:集合不僅僅是一個模型數組......它附有很多東西。該集合的「模型」屬性是所有數據所在的位置。只有這是事實的絕對根源 - 其他任何事物都在撒謊或者做一些不該做的事情。

編輯: 要添加到此,爲什麼不引用'this'而不是'items'?即這個模型?畢竟,如果你想知道你正在使用的集合裏面是什麼,不得不引用一個全局變量,這有點愚蠢:)(而且實踐中很糟糕)。

編輯#2: 另外,'fetch'是異步的,除非另有指定..所以如果你想獲得一致的,可重複的結果,在一行中執行兩次讀取是不會給它的您。如果其中一個請求由於某種原因甚至比另一個要慢一毫秒,那麼你的結果無論如何都會失序。

相關問題