時に$アヤックスを実行:ノックアウトJSと私は、データベースから来たオブジェクトの私のリストは次のようになりように、データベースから取得されるデータに基づいて動的に生成されたテーブル持っているにtextInput変更
public string Account { get; set; }
public string Description { get; set; }
public decimal A2Year { get; set; }
public decimal A1Year { get; set; }
public decimal B1Year { get; set; }
public decimal Current { get; set; }
public decimal Proposed { get; set; }
public IEnumerable<CustomerInfo> UserSalaries { get; set; }
を私はこれを取得します$を使用したデータは、機能を入手アヤックス、それがリストであるので、私は次のようにテーブルを生成:
<tbody data-bind="foreach: accountData">
<tr class="dept-row" role="row">
<td><span data-bind="text: Description"></span></td>
<td><span data-bind="text: Account"></span></td>
<td class="center-text"><a data-bind="click: function(){ $parent.showNoteDialog(Account)}"></a></td>
<td class="align-right"><span data-bind="text: A2Year"></span></td>
<td class="align-right"><span data-bind="text: B1Year"></span></td>
<td class="align-right"><span data-bind="text: A1Year"></span></td>
<td class="align-right"><span data-bind="text: Current"></span></td>
<td><input class="align-right dollar-amount" data-bind="textInput: Proposed" /></td>
</tr>
</tbody>
表が適切に生成され、私のビューモデルに私は次の行があります。
を私が達成しようとしているのは、KnockoutJSの新機能です。入力値が「提案された」ときに、この値をデータベースに保存するために$ .ajax関数を呼び出したいと思います。私は、 "hasFocus"をバインドして読み込み、フィールドを離れるときにajaxを呼び出すことができましたが、すべての入力フィールドがまったく同じバインディングを持つため、hasFocusバインディングを追加するとテーブルを生成できませんでした。どのようにこれを達成するための任意の提案?提案された値は、それ自身の観測可能な配列にあるか、オブジェクトのリスト全体を追跡するだけで十分ですか?究極の質問は、データが変更されたときにデータを保存するためにajax関数を呼び出す方法です。私が正しく理解している場合は
私はバリューバインディングについて知っていますが、ドキュメントによると、 'text'は' value'バインディング(http://knockoutjs.com/documentation/textinput-binding.html)上で使用されるべきです。私は加入者について知っていますが、これは入力フィールドの数を知っていて、それぞれについて観測可能です。何か不足していますか?観測可能な配列のサブスクライバを使用して、観測値の1つの値がいつ変化するかを確認できますか? – zuboje
フィールドを離れると、データが正しく変更された場合に限り、ajax呼び出しを実行しますか?次に、値バインディングが必要です。 textInputは、フィールドを出る前でも応答します。観測可能な配列のサブスクライバは、要素の1つを変更するときではなく、配列から要素を追加または削除するときに機能します。理想的には、すべての入力フィールドにオブザーバブルが必要です。そうでなければノックアウトを使用する理由は? – Ray
これは正しいです。私は配列の各要素について観察可能でなければならない、これは私が達成する方法がわからない部分です。 – zuboje