1

私はこのTypeScriptクラスを持っています

export class MyItem {
    public name: any;
    public active: any;

    constructor(private root: MyViewModel, public id: number, name, active) {
        this.name = ko.observable<string>(name);
        this.active = ko.observable<bool>(active);

        this.active.subscribe(() => {
            root.Update(this);
        });
    }
}   

以下のように、入力チェックボックスの監視可能なプロパティcheckedとの間にバインディングがある場所で使用されています。これは、parent のプロパティであるバインディング コンテキスト内にあります。activeforeachItemsMyViewModel

<div class="row" data-bind="visible: ItemsExist" style="display: none">
    <div class="col-md-12">
        <table class="item-list" data-bind="foreach: Items">
            <tr>
                <td>
                    <input type="checkbox" data-bind="checked: active" />
                    <span data-bind="text: name, css: { disabled: !active() }"></span>
                </td>
                <td><input type="button" value="Delete" data-bind="click: $parent.Delete.bind($parent)" /></td>
            </tr>
        </table>
    </div>
</div>

コンストラクターで参照を渡すことなく、各アイテムのオブザーバブルでサブスクライブされたイベントにコンテキストをMyItem渡すことができるように、このクラスを変更するにはどうすればよいですか?$parentactiveMyViewModel

TypeScript でコンパイルすることもできます。

ありがとう

4

2 に答える 2

0

Updateそれ以来、親のメソッドはそのMyViewModel作業を行うために親への参照を必要としないことに気付いたので、それをMyItemクラスに移動しました。これで問題が解決しました。

initの代わりに何らかのメソッドを介していても、親の参照を渡さずに最初に要求したことを行う方法をまだ見ていませんconstructor

于 2013-09-13T08:46:39.810 に答える
0

変更が発生したときにサードパーティ エンティティ に通知するためにMyItem、独自のプロパティの変更を購読しています。ジレンマは、サードパーティが誰であるかを正確に把握していないことです。activeMyViewModelMyItem

代わりに、変更を気にし、すでにアイテムへの参照を持っているプロパティであるため、単にそれ自体のプロパティをMyViewModel購読することができます。activeMyItemMyViewModel

于 2014-04-15T20:21:46.457 に答える