2014-09-18 50 views
0

使用knockout的新3.2組件規範,我試圖創建一個組件,其中包含一個用於呈現對象集合的foreach綁定。 foreach綁定內部的對象需要訪問組件虛擬機上的屬性,但似乎在foreach循環中會丟失一次引用。Knockout 3.2組件 - 無法訪問foreach綁定中的組件viewModel root

是否有一種簡單的方法可以直接訪問其模板中組件視圖模型的根?

組件VM:

function RelatedCompaniesViewModel(params) { 
    var self = this; 

    self.companies = params.companies; 
    self.displayLimit = ko.observable(3); 

} 

組件模板:

<!-- ko foreach: companies() --> 
    <li data-bind="visible: $index() < displayLimit()"> 
     ...more bindings... 
    </li> 
<!-- /ko --> 

(returns a "displayLimit is not defined" error) 
+3

到以前的方法類似的使用可用的[結合上下文]中的一個(http://knockoutjs.com/documentation/binding-context.html)屬性。在這種特殊情況下[$ parent](http://jsfiddle.net/w0vgfrbw/)或'$ root'可以工作。 – Origineil 2014-09-19 03:10:53

+0

* facepalm *甚至不知道$父上下文存在。上面列出的整個模塊嵌套在另一個組件中,因此$ root不起作用。非常有幫助,謝謝。 – fscof 2014-09-19 14:56:32

回答

3

變化displayLimit()$parent.displayLimit()

分量模板:

<!-- ko foreach: companies() --> 
    <li data-bind="visible: $index() < $parent.displayLimit()"> 
     ...more bindings... 
    </li> 
<!-- /ko -->