「値」バインディングは、最初に要素の値をビューモデルの値に設定するため、いいえ。ただし、最初にコントロールの値からモデル値を設定する独自のハンドラーに「値」バインディングのコードを複製することもできます。ノックアウトのデバッグ バージョンをダウンロードし、 2182 行を探します。ko.bindingHandlers['value'] = {
このバインディング ハンドラー宣言をコピーして、「値」を別のものに変更し、init の最後に valueUpdateHandler() の呼び出しを追加します。
ko.bindingHandlers['myvalue'] = {
'init': function (element, valueAccessor, allBindingsAccessor) {
// skipping code
valueUpdateHandler(); // update model with control values
},
'update': function (element, valueAccessor) {
// skipping code
}
};
myvalue バインディングを使用すると、最初にバインドされたときにモデルがコントロール値で更新されます。
<input type="text" data-bind="myvalue: name"></input>
または、すべてのコードをコピーする代わりに元の値を呼び出して、init の後に valueUpdateHandler からコードを追加することもできます。
ko.bindingHandlers['myvalue'] = {
'init': function (element, valueAccessor, allBindingsAccessor) {
// call existing value init code
ko.bindingHandlers['value'].init(element, valueAccessor, allBindingsAccessor);
// valueUpdateHandler() code
var modelValue = valueAccessor();
var elementValue = ko.selectExtensions.readValue(element);
ko.jsonExpressionRewriting.writeValueToProperty(modelValue, allBindingsAccessor, 'value', elementValue, /* checkIfDifferent: */ true);
},
'update': function (element, valueAccessor) {
// call existing value update code
ko.bindingHandlers['value'].update(element, valueAccessor);
}
};
AJAX を使用したくない場合は、モデルを JSON (剃刀構文) としてシリアル化することで、いつでも値を JavaScript に取得できます。
<script type="text/javascript">
var model = @(new HtmlString(new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Model)));
</script>