問題: ウィジェットのダッシュボードを作成しようとしています。各ウィジェットのヘッダーには削除ボタンがあります。このボタンをクリックすると、対応するウィジェットが消える必要があります。
設計方法: 2 つのノックアウト コンポーネントがあります。
- my-widget-list: VO にはウィジェット オブジェクトの observableArray があります。
- my-widget: VO には、ウィジェット内に表示する詳細があります。
注: 簡単にするために、widget オブジェクトを数字だけに置き換えています。
ko.components.register('my-widget-list', {
viewModel : function(params) {
var self = this;
self.values = ko.observableArray([10,20,30,40,50]);
self.deleteWidget = function(obj)
{
self.values.remove(obj);
}
},
template: {element: 'my-widget-list-template'}
});
ko.components.register('my-widget', {
viewModel : function(params) {
var self = this;
self.value = params.value;
},
template: {element: 'my-widget-template'}
});
ko.applyBindings({});
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<my-widget-list></my-widget-list>
<script id="my-widget-list-template" type="text/html">
<div data-bind="foreach:values">
<my-widget params="value: $data"></my-widget><br>
</div>
</script>
<script id="my-widget-template" type="text/html">
<span data-bind="text: value"></span>
<button data-bind="click: $parent.deleteWidget">Delete</button>
</script>
ここで、ボタンがクリックされたときにmy-widget-list
の関数を呼び出したいと思います。deleteWidget
私は考えました
- 親ビュー モデル参照を子に渡す
- 子コンポーネントの params 属性で親関数をコールバックとして渡す
しかし、これを達成するための最良の方法は何かを専門家から知りたいです。
前もって感謝します