2012-02-28 14 views
2

私は銀色のデータフォームに似たデータグリッドを使用してデータフォーム機能を作成しようとしています。ノックアウト選択アイテムの変更

私はグリッドから選択した項目を表示するためのdivがあります

this.setSelectedEntry = function (id) { 
       vm.selectedEntry = vm.data()[id]; 
} 

選択した項目は次のとおりです。私の見解モデルの

$('#readDate').attr('data-bind', 'text : selectedEntry.expenseDate'); 
$('#readDesc').attr('data-bind', 'text : selectedEntry.expenseDescription'); 
$('#readAmount').attr('data-bind', 'text : selectedEntry.expenseAmount'); 

を、私が選択した項目を設定する機能を持っています

function ExpenseEntry(Id, expenseDate, expenseDescription, expenseAmount) { 
      this.Id = Id; 
      this.expenseDate = ko.observable(expenseDate); 
      this.expenseDescription = ko.observable(expenseDescription); 
      this.expenseAmount = ko.observable(expenseAmount); 
     } 

ただし、selectedEntryオブジェクトを変更すると、UIは更新されませんated。これはUIがオブジェクトのメンバーにバインドされ、オブジェクト自体にバインドされないためですか? selectedEntryに直接バインドする方法はありますか?

答えて

3

あなたのコード全体を見なければ、正確な問題を特定するのは難しいが、ここであなたは少し異なる方法でやろうとしているかを示しているJSFiddleです:

http://jsfiddle.net/jearles/wgZ59/50/

選択「ロード行列」テーブルをロードする。詳細を入力する項目を選択できます。

-

私はあなたの問題は、あなたが「selectedEntry」を扱っているかであることを推測しています。ノックアウトは、基になるオブジェクトがオブザーバブルである場合にのみバインディングを更新します。普通のJSオブジェクトを使用しているようです。 Observableを処理したら、バインディングを 'selectedEntry()。expenseDate'の形式に変更します。ノックアウトは関数としてオブザーバブルを作成するため、observableName()を使用してreadおよびobservableName(value)を使用して記述します。 JavaScript式を使用しているときは、「読み込み」フォームを使用する必要があります。私の例では、コンテナdivを使用して、 "with"を使用して外部コンテキストを設定できるようにしました。これにより、内部バインディングが単に「経費支出日」になることができます。

+0

ありがとうございます。私が理解できなかったことの1つは、これを行うときにselect関数にアイテムがどのように渡されているかです:click:$ root.select? –

+1

私はノックアウトの "クリック"バインディング(http://knockoutjs.com/documentation/click-binding.html)を使用しています。クリックイベントが発生すると、Knockoutはバインディングにリストされている関数を呼び出し、現在のデータ項目を最初のパラメータとして渡します。私の場合は、ルートビューモデルにある 'select'関数を呼び出します。 –

関連する問題