13

KnockoutJSを使用して、監視可能な配列からアイテムを削除するにはどうすればよいですか?listitemをクリックして、配列(およびそれによってリスト)からアイテムを削除できるようにしたい。

以下のコードサンプルは次のように報告します:'this.expertiseisundefined'。

ある種の専門知識オブジェクトを定義し、そこから呼び出す必要がありますか?

<ul data-bind="foreach: expertise">
    <li data-bind="text: Key, click: $parent.removeExpertise"></li>
</ul>

<script type="text/javascript">
    $(function () {
        function AppViewModel() {

            this.removeExpertise = function (expertise) {
                this.expertise.remove(expertise);

            };

            this.expertise = ko.observable([
                { Key: 'Charles', Value: 'Charlesforth' },
                { Key: 'Denise', Value: 'Dentiste' }
            ]);
        }

        // Activates knockout.js
        jQuery(document).ready(function () {
            ko.applyBindings(new AppViewModel());
        });
    });
</script>
4

1 に答える 1

17

子からメソッドを呼び出すと、thisではなく子に設定され$parentます。

removeExpertiseがに適切な値で呼び出されるようにする方法は多数ありますthis。簡単な方法は、 を使用すること.bindです。

次のようになります。

this.removeExpertise = function (expertise) {
    this.expertise.remove(expertise);
}.bind(this);

また、 は関数を含む配列操作メソッドを公開するexpertiseため、 ではなく になりobservableArrayたいと思うでしょう。observableobservableArrayremove

于 2012-04-20T20:25:53.343 に答える