2

コンテナ テンプレートから呼び出されたクリック イベントから observableArray にアクセスする方法がわからないプロジェクトがあります。私はここにフィドルで簡素化された例を持っています:

http://jsfiddle.net/zBarW/26/

クリック イベントはテンプレートで指定され、アイテム自体のプロパティから各アイテムのテンプレートが動的に読み込まれます。

したがって、アイテムの例は次のとおりです。

{ID: 1, TemplateName: 'template1', Label: 'Name', Description: 'Your name'}

「親」テンプレートは次のようになります。

<script type="text/html" id="tpl-placeholder">
<div class="entry" data-bind="click: $parent.RemoveEntry, attr: { id: ID}, template: {name: TemplateName }"></div>
</script>

動的に読み込まれたテンプレートは次のようになります。

<script type="text/html" id="template1">
    <h1 data-bind="text: Label"></h1>
    <div data-bind="text: Description"></div>
</script>

クリック イベントを処理するメソッド (この場合は RemoveEntry) で、observableArray (エントリ) にアクセスしようとすると null が返されます。

ビューモデルは次のとおりです。

var viewModel = {

    Name: ko.observable("Entries"),

    Entries: ko.observableArray( entries ),

    RemoveEntry: function (entry) {
        // how do I access the "Entries" list here - this.Entries returns null
        $("#debug").text(this.Entries == null);
        this.Entries.remove(entry);
    }
};

私はノックアウトの初心者です..誰かが私がここで間違っていることを教えてもらえますか? ありがとう!

4

2 に答える 2

2

あなたのやり方では、viewmodel.Entriesに直接アクセスします...

ただし、より一般的には次のようにします:-

http://jsfiddle.net/keith_nicholas/RAMcc/

古き良きJavaScriptハックで

var self = this;
于 2012-06-26T22:19:01.370 に答える
0

最初のテストでは、viewModel.Entriesを使用できることがわかりました。Keith のレスポンスの方が優れていると思います。より典型的な方法であることは間違いありません。完全を期すために、これをここに残します。

私の例では、これは機能します:

RemoveEntry: function (entry) {
    // how do I access the "Entries" list here - this.Entries returns null
    $("#debug").text(viewModel.Entries == null);
    viewModel.Entries.remove(entry);
}
于 2012-06-26T22:19:19.233 に答える