2012-02-12 9 views
0

バインドされた表のセルのテキストが更新されたときに更新する必要があります。domテキストが変更されたときにknockoutjs viewmodelを更新する

アップデートを行うには何が必要ですか?

例:

+2

はなぜあなたの代わりに、直接基礎となるデータを更新するセルのテキストを更新していますか? knockout.jsの全体的なポイントは、あなたのビューモデルで作業することができ、UIの更新について心配する必要がないことです。フレームワークはそれを気にします。後でプレゼンテーション(テーブルからdivへの切り替えなど)を変更したい場合は、コードを変更する必要はなく、単にhtmlを変更してバインディングを設定するだけです。 –

答えて

0

これは悪い質問で悪い例でした。私は、contenteditableのような入力コントロールがない場合やdomを更新するダイナミックコントロールのような場合にDOMが変更されたときにViewModelを更新する方法を知りたかったのです。

とにかく、私はAlfeGの答えと同様の答えhereが好きです。

しかし、私は新しいdataForヘルパー機能を使用することを選択しました。これを使用して、基になるViewModelを簡単に更新できます。

例:http://jsfiddle.net/2hdRp/3/

1

これはすでにKnockoutJsの枠組みの中で実装されていない場合、私はよく分かりません。

これはあなたのための私のカスタムバインディングでは、質問:

<td id="idCell" data-bind="textValue: Car.id, valueUpdate: 'change'" 
    class="header"></td> 

の作業例:バインディング

ko.bindingHandlers.textValue = { 
    init: function(element, valueAccessor, allBindingsAccessor, viewModel) { 
     // First get the latest data that we're bound to 
     var value = valueAccessor(), allBindings = allBindingsAccessor(); 
     var valueUnwrapped = ko.utils.unwrapObservable(value); 

     $(element).change(function(){ 
      value($(this).text()); 
     }); 
    }, 
    update: function(element, valueAccessor, allBindingsAccessor, viewModel) { 
     var value = valueAccessor(), allBindings = allBindingsAccessor(); 
     var valueUnwrapped = ko.utils.unwrapObservable(value); 
     $(element).text(valueUnwrapped); 
    } 
}; 

は次のようになりますあなたは根本的な値、観測可能に変更する必要がありhttp://jsfiddle.net/AlfeG/dNtNb/

1

、 DOMを更新する代わりに。

関連する問題