2012-01-19 11 views
0

私は名前付きテンプレートを使用しており、そのデータのリストをバインドしています。バインディングは素晴らしいですが、$ parent.inState()呼び出しでエラーが発生します。以下のサンプルを見て:

<div data-bind="template: { name: 'peopleScript', data: people }"> </div> 

<script id="peopleScript" type="text/html"> 
    <ul data-bind="foreach: people"> 
     <li> 
      Name: <span data-bind="text: name"> </span> 
      State: <span data-bind="{ text: state, css: { outOfState: !$parent.inState($data) } }"> </span> 

      <span data-bind="visible: ($parent.inState($data))"> 
       In State 
      <span> 

      <a href="#" data-bind="click: $parent.removePerson">Remove</a> 
     </li> 
    </ul> 
    <button data-bind="click: addPerson">Add</button> 
</script> 

それは$parent.inStateは関数ではありませんと言います。私はすでに$parentsを試しましたが、役に立たないです。私は、バインディングの動作を適用するコードを知っています。私はちょうどテンプレートのインラインを持っている場合、それは素晴らしい作品です。私はまた、他のすべての設定がOKであり、メソッドにアクセスできることを知っています。つまり、何らかの理由でinStateが見つからないということだけです。

なぜでしょうか?

ありがとうございました。

答えて

2

あなたの構造が本当にpeople.peopleでない限り、人々は、あなたが($dataforeachしたいと思うようdataを渡している

あなたが行うことができます:。

<div> 
    <ul data-bind="template: { name: 'peopleScript', foreach: people }"></ul> 
</div> 

だけでliを持っていますテンプレート、または現在の構造を使用して、$dataforeachを入力してください。

issu eがinStateの場合、templateは1つのスコープを作成し、foreachバインディングは別のスコープを作成します。だから、あなたが内部にいるとき、あなたは2つのスコープを上らなければならないでしょう。あなたは次のように$parents[1]を使用してこれを行うことができます:http://jsfiddle.net/rniemeyer/RNWML/またはそれは本当にトップレベルにある場合は、$rootを使用するような最も簡単な選択である:それは私が遊んでた何か:-)私の構造が本当にpeople.peopleあるhttp://jsfiddle.net/rniemeyer/RNWML/2/

+0

。 $ parents [1]はトリックをしました、ありがとう –

関連する問題