2016-11-08 17 views
0

Hereは、私が取り組んでいるプランカのコードです。私はこのように見えるVMを定義しました。

var employee = function(fname,lname){ 
    var self= this; 
    self.fname = ko.observable(fname); 
    self.lname = ko.observable(lname); 
    self.selectedElement = ko.observable('Default Value'); 
    } 

    var vm = function(){ 
     var self = this; 
     self.employees = new ko.observableArray([]); 
     self.selectedElement = ko.observable(-1); 

     var e1 = new employee('f1','l1'); 
     var e2 = new employee('f2','l2'); 
     self.employees.push(e1); 
     self.employees.push(e2); 
    }; 

    ko.applyBindings(vm,container); 

そして従業員のリストを表示するために私のコードは

<body id="container"> 
<h1>Empoyees</h1> 
<div> 
    <div data-bind="foreach: employees"> 
    <h4 data-bind="text: 'Employee' + $index()"></h4> 
    <span>First Name :</span> 
    <span data-bind="text: fname"></span> 
    <br/> 

    <span>Last Name :</span> 
    <span data-bind="text: fname"></span> 
    <br/> 

    <span data-bind="text: selectedElement()"></span> 
    <!-- I want to access parents 'selectedElement' i.e. vm.slectedElement() --> 
    <!--I tried below code but its causing binding error.--> 
    <!-- <span data-bind="text: $parent.selectedElement()"></span> --> 
    <br/> 
    </div> 
</div> 

なお、小娘「employee」とメインビューモデル「vm」両方同じプロパティが名付けた(selectedElement)今の内側

ですforeachバインディング私はroot/parentコンテキストの 'selectedElement'プロパティにアクセスしようとしていますが、foreach koが 'employee'クラスの 'selectedElement'プロパティにアクセスしているためです。

キーワード「$root」と「$parent」を使用して親要素プロパティに到達しようとしましたが、バインディングエラーが発生しました。

何か不足していますか? Hereは再びプランカーリンクです。

答えて

3

ルートビューモデルのインスタンスを作成したことはありませんでした。予想通り

ko.applyBindings(new vm(),container); 

https://plnkr.co/edit/wRKfnJi9Jl9Rj2unbgQp?p=preview

あなたがそれを行う、のいずれか$rootまたは$parentへの最初の呼び出しを変更するには、動作します。

+0

迅速な対応のために@Jamiecに感謝します。しかし、まだ私は私のビューモデルのオブジェクトをインスタンス化せずにすべての他のもの($ root/$ parentを除く)がなぜ働いたのか私の頭を傷つけています。私は基礎を知らないかもしれません。あなたはこれにいくつかの光を投げてくださいできますか? – user2243747

+1

@ user2243747 knockoutはビューモデルとしてまっすぐな関数を受け入れますが、おそらく 'this'はウィンドウオブジェクトを参照します。ランタイムのビューモデルの階層を混乱させるので、 '$ root'や' $ parent'のようなものはおそらく間違った場所を指しているでしょう。 – Jamiec

関連する問題