クライアント側を動的に変更する必要がある複雑なUIを作成したい場合、ノックアウトは非常に優れています。これは、ノックアウトで求めていることを実行する方法の簡単な例です。
HTML:
<form>
<select name="inputSelect" data-bind="options: dataSet, optionsText: 'Name', value: selectedItem, optionsCaption: '-- Select --'"></select>
<input type="text" name="firstName" data-bind="value: firstName, visible: selectedItem() && selectedItem().Name == 'First Name'" />
<input type="text" name="lastName" data-bind="value: lastName, visible: selectedItem() && selectedItem().Name == 'Last Name'" />
<input type="text" name="age" data-bind="value: age, visible: selectedItem() && selectedItem().Name == 'Age'" />
</form>
JSモデル:
function Model() {
var self = this;
self.firstName = ko.observable('Matthew');
self.lastName = ko.observable('Cox');
self.age = ko.observable(26);
self.selectedItem = ko.observable();
self.dataSet = ko.observableArray([{ Id: 0, Name:'First Name'}, { Id: 1, Name:'Last Name'}, { Id: 2, Name:'Age'}]);
}
var vm = new Model();
ko.applyBindings(vm);
JSFiddle:
http: //jsfiddle.net/JmpGD/1/
説明:
のNameプロパティをチェックする各入力にvisible
バインディングを設定して、selectedItem()
表示するアイテムを決定します。
jsfiddleでは、わずかに異なるアプローチを使用しselectedItem()
てnullを処理します。これにより、visible
を評価しようとしたときにバインディングが爆発しますselectedItem().Name == 'something'
。
あなたはそれがどのように機能するかについてここで読むことができます
http://knockoutjs.com/documentation/with-binding.html