Knockout JS 統合を探している人は誰でもここにいます。
次の HTML (標準の Bootstrap ドロップダウン ボタン) があるとします。
<div class="dropdown">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
Select an item
<span class="caret"></span>
</button>
<ul class="dropdown-menu" role="menu">
<li>
<a href="javascript:;" data-bind="click: clickTest">Click 1</a>
</li>
<li>
<a href="javascript:;" data-bind="click: clickTest">Click 2</a>
</li>
<li>
<a href="javascript:;" data-bind="click: clickTest">Click 3</a>
</li>
</ul>
</div>
次の JS を使用します。
var viewModel = function(){
var self = this;
self.clickTest = function(){
alert("I've been clicked!");
}
};
ノックアウト オブザーバブル配列に基づいてドロップダウン オプションを生成しようとしている場合、コードは次のようになります。
var viewModel = function(){
var self = this;
self.dropdownOptions = ko.observableArray([
{ id: 1, label: "Click 1" },
{ id: 2, label: "Click 2" },
{ id: 3, label: "Click 3" }
])
self.clickTest = function(item){
alert("Item with id:" + item.id + " was clicked!");
}
};
<!-- REST OF DD CODE -->
<ul class="dropdown-menu" role="menu">
<!-- ko foreach: { data: dropdownOptions, as: 'option' } -->
<li>
<a href="javascript:;" data-bind="click: $parent.clickTest, text: option.clickTest"></a>
</li>
<!-- /ko -->
</ul>
<!-- REST OF DD CODE -->
監視可能な配列項目は、ビュー モデル コードで使用するためにクリック関数ハンドラーに暗黙的に渡されることに注意してください。