2016-02-25 25 views
0

對不起,如果這是一個愚蠢的問題。我處於Ember學習曲線最陡峭的部分中,試圖讓一個簡單的應用程序成爲我自己的學習工具,而我的谷歌正在讓我無法理解如何做到這一點;使用並綁定組件{{input}}

我有一個組件基本上是一些模型對象與一些過濾選項。與此討論相關的過濾器選項是自由文本搜索。我希望有一個{{input}}被綁定到一些影響結果列表的值,只要它被更新。

{{input type=text value=filterString}} 

在我的餘燼缺乏瞭解,我會約束輸入一個字符串屬性的值,並有我filteredMatches計算性能取決於這一點。不過,如果我定義屬性作爲這樣的:

filteredMatches: Ember.computed.filter('matches', 'filterString', function(match, index, array) { 

我在控制檯日誌得到一個錯誤:

Uncaught TypeError: callback.call is not a function 

如果我刪除提及「filterString」,它工作正常,但當我在輸入中輸入內容時,過濾不會更新。

因此,在我對Ember有限的知識的情況下,我堅持了這一點;輸入是否實際綁定到控制器上的filterString,而不是組件?根據我的理解,他們將會消失,我不使用顯式控制器。如果是這樣的話,我怎麼能在我的組件中有一個計算屬性取決於控制器屬性?

如果不是這種情況(即不涉及控制器),我如何將輸入綁定到組件屬性並相應地對值更改作出反應?

ember -v 
version: 2.3.0-beta.2 
node: 5.6.0 
npm: 2.14.10 
os: win32 x64 

感謝您的幫助,並再次,對不起,如果這個問題是愚蠢的!

編輯:Kitler和Lux的答案都很有啓發和幫助。我選擇了Lux,因爲它帶有一個具體的解決方案,但我希望我可以接受這兩個。爲了彌補它,我一定會加入Slack頻道。 :)

回答

2

Ember.computed.filter的簽名爲(dependentKey, callback)Checkout the documentation.

第二個參數必須是是一個函數。對於您的使用情況,請使用正常的計算屬性:

filteredMatches: Ember.computed('matches', 'filterString', { 
    get() { 
     return get(this, 'matches').filter(item => item.indexOf(get(this, 'filterString')) >= 0) 
    } 
}) 
1

在這種情況下,你無法在谷歌上找到答案API documentation是地方,如果你看看Ember.computed.filter的文檔,你會發現它只需要1個相關鍵。

爲了解決您的問題,請使用Ember.computed以及Ember.Arrayfilter之一的功能。

對於此類問題的未來,請考慮加入我們的ember community slack頻道。