2015-09-25 104 views
0

我想根據獲得的值從JSON形成一個集合,Backbone的where看起來像是一個完美的工具,但它看起來像不接受變量。使用Backbone,Lodash或Underscore方法可以實現這種功能嗎?將變量傳遞到Backbone.where

### collection instantiated above 

App.vent.on 'event', (obtained_value) -> 
    desired_models = collection.where(attribute: obtained_value) 
    console.log desired_models 

### outputs empty array 
>[] 

它的工作時,我直接傳遞key: value,但我需要動態地形成集合。也許我最初採取了錯誤的路線,解決方案是在另一個方向?

+0

這應該可以正常工作。 'obtain_value'中具體是什麼,以及你期望它匹配什麼特定的值? 'obtain_value'是一個字符串,但'attribute'的值是一個數字? –

+0

@ muistooshort,這個想法是在另一個視圖中基於選擇的選項('A')渲染多個模型('B)。 'A'通過'has_many'關係與'B'連接。爲了達到這個目的,我的計劃是獲取所選選項(id)的值,並通過控制器上的Event Aggregator傳遞它,在那裏我可以訪問'B'集合。 'B'模型的JSON與'A'模型'a:id'的id相關。因此,通過'A'的編號,我計劃將所有相關的B模型作爲一個集合檢索並傳遞給它的視圖。所以'獲得的價值'是數字,'屬性是字符串',是的。 –

+0

@ muistooshort我希望那不是太混亂的解釋。感謝您的關注。 - curious_gudleif –

回答

0

這不會工作,你需要傳遞一個對象,因此它會是這樣

collection.where({attribute: obtained_value}); 

在coffescript你可以做以下

attribute_var= 
    attribute:obtained_value 

collection.where(attribute_var); 

問候

+0

問題出在CoffeeScript中,它允許使用表示法。 –

+0

好吧,大括號的包裝對我來說是這樣做的,但@PlatinumAzure指出,我想我可以忽略它們。 –

+0

不幸的是我太匆忙了,沒有保存代碼。它仍然不起作用。 –

0

我假設你的目標是改變attribute你正在尋找,因爲如果價值是多種多樣的,對象文字應該工作正常。

你可以做到這一點,而不是對象字面內聯。以下是我如何使用JavaScript:

App.vent.on('event', function (obtainedValue) { 
    var finder = {}; 
    finder[attribute] = obtainedValue; 
    desiredModels = collection.where(finder); 
    console.log(desiredModels); 
}); 
+0

,'finder [屬性]'返回'屬性是undefined'。它只是'desiredModel'的一個屬性,難道不應該像我這樣無法訪問?感謝您的關注。 –