したがって、ノックアウトテンプレートがあり、次のようになります。
<tbody data-bind='foreach: PrizeFulfilmentStatuses'>
<tr >
<td><input data-bind='value: Description' /></td>
<td><input data-bind='value: Order' /></td>
<td><input type="checkbox" data-bind="checked: Editable"/></td>
<td> <div data-bind = "attr:{color:ColorHex },style:{backgroundcolor: ColorHex}, value: ColorHex" class="colorpickerHolder" style="height:30px; border: transparent; width: 30px;"></div> </td>
</tr>
</tbody>
これで、最後の TD の多くのプロパティに ColorHex が割り当てられていることがわかります。さて、これは私が何かを理解しようとした結果です。
どうやら、Editable や description などの他のすべてのオブザーバブルは双方向バインディングであるため、UI の値を変更するとオブザーバブルも変更され、データをサーバーに POST すると変更が反映されます。ColorHex はありません。サーバーに送信される値は、サーバーから最初に送信された元の値です。ここでは変更は反映されません。
以下は、ColorHex にバインドされたプロパティを変更するコードです。これは、カラーピッカー Jquery プラグインです。
self.ApplyColorPicker = function () {
var $target = $(this);
$(this).css("background-color", $(this).attr('color'));
$(this).ColorPicker({
color: $(this).attr('color'),
onShow: function (colpkr) {
$(colpkr).fadeIn(500);
return false;
},
onHide: function (colpkr) {
$(colpkr).fadeOut(500);
return false;
},
onChange: function (hsb, hex, rgb) {
$target.css('backgroundColor', '#' + hex);
$target.attr('value', '#' + hex);
}
});
};
次の 2 行が表示されます。
$target.css('backgroundColor', '#' + hex);
$target.attr('value', '#' + hex);
それらが実行されると、「背景色」と値の両方の値が変更されていることがfirebugでわかります。ただし、値を投稿する場合、または更新された値ではなく古い値を投稿する場合。
なぜ何か提案はありますか?