2014-02-14 121 views
0

因此,無論何時我想從我的收藏中選擇一個模型,我總是會使用骨幹自己的where方法。Backbone.js爲什麼我必須使用下劃線(_.each)來定位模型?

var homeTeam = this.collection.where({teamName: this.currentTeamName('home')}); 

我有我自己的方法,抓住當前和我的團隊通過「家」或「離開」作爲一個參數,它知道搶哪種模式,這是所有罰款和花花公子,另一個例子是隻傳遞一個像下面的字符串。

// This is practically the same as the above. 
var homeTeam = this.collection.where({teamName: 'bulls'}); 

所以,如果我記錄變量console.log(homeTeam)控制檯顯示該模型,就像它做任何模型。

控制檯顯示我,我有機會獲得常規方法的模型可以使用http://backbonejs.org/#Model但如果我調用這些方法,我得到一個錯誤之一,前homeTeam.save({someAttr: 'juicy'});

所以我只是用下劃線的each方法如下圖所示,它作品。

_.each(homeTeam, function(model) { model.save({someAttr: 'juicy'}); }, this); 

我一直在做這一段時間,但我很好奇,想知道爲什麼我必須做的是,記錄該homeTeam當它通過模型就像

_.each(homeTeam, function(model) { console.log(model) }, this); 

它們顯示完全一樣控制檯。

+0

嘗試直接調用.save時會出現什麼錯誤? –

+0

你們都好,現在它作爲一個數組返回是有道理的。讓我玩弄'findWhere'並挖掘brb,你們真棒。 –

回答

1

因爲where返回模型的數組。該陣列不是模型對象。這是一個數組。

請參閱source

1

啊,我想我在這裏看到了問題。

.where返回一個數組;儘管它是Model的數組,但Javascript控制檯會將條目評估爲模型,以便您可以看到Backbone提供的方法。

你需要做的是使用.findWhere。

這將返回第一個匹配模型,作爲正確類型的對象。

或者你可以嘗試(只是爲了證明)「homeTeam [0] .save(...)

澄清:你得到的錯誤,因爲homeTeam是不是你認爲它是;歡迎來到Javascript!

+0

是的,這是有道理的,真的這是我需要的。感謝讓我玩弄brb。 –

1

假設team.teamName是唯一的,您可以安全地使用.findWhere,它會從您的集合中返回一個模型,而不是返回模型數組的.find

underscore docs

findWhere 看起來列表並返回匹配所有屬性中列出的鍵值對的第一個值

通過列表中的每個值相對

where 看起來,返回所有包含在所有屬性中列出的鍵 - 值對的值的陣列

相關問題