2016-03-30 23 views
0

ネストされたforeach内からルートレベルのプロパティにアクセスしようとしています。knockout:ネストされたforeachから親スコープのプロパティにアクセスできない

<!-- ko foreach: { data: items, 'as': 'item' } --> 
<tr data-bind="foreach: { data: $parent.columns, 'as': 'column' }" > 
    <td>{{ item[column.key] }}</td> 
    <!-- ko if: $root.thing --> 
    <td><button class="btn btn-default" >click me</button></td> 
    <!-- /ko -->    
</tr> 
<!-- /ko --> 

thingは、オブジェクティブではありません。 $root.thingはfalseと評価されています。私も$parent[1].thingを試しました。それで私は$root$parent[1]がこのケースでは同等だと思っていたので、私にバインドエラーMessage: Cannot read property 'thing' of undefinedが奇妙です。

EDIT:このコードはコンポーネントの一部です。ビューでは、それはこのようなものになります。コンポーネントで

<component data-bind="thing: {prop: 'foo'}, stuff: $data" /> 

を、私たちは持っている:

return function(params) { 
    this.thing = params.thing; 
    this.items = params.stuff.items; 
    this.columns = [{key: 'one'}, {key: 'two'}]; 
}) 
+0

rootに相当する '$ parents [1]'にする必要があります。 '$ parents [1] .thing'はまだfalseなので、これはあなたの問題に答えることはできません。あなたのviewmodelのようなコードが(すべてではないが)より多く表示されることは役に立ちます。 – Adrian

+0

私はさらにコードを追加しました –

+0

実際、 '$ parents [1] .thing'は動作しますが、なぜ' $ root'が動作しないのか知りたいです。それがコンポーネントなのか? –

答えて

0

$root参照のviewmodel、いないコンポーネントを、$parents[]を使用しています。ノックアウト3.3以降、$componentも使用できます。

関連する問題