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和observable 属性之间存在绑定,这是在绑定上下文中,它是 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,以便可以将$parent上下文传递给每个项目的可观察对象上的订阅事件active,而不必MyViewModel在构造函数中传递对的引用?

但也可以在 TypeScript 中编译。

谢谢

4

2 回答 2

0

从那以后我意识到父级上的Update方法MyViewModel不需要对父级的任何引用来完成它的工作,所以我将它移到了MyItem类中,这解决了我的问题。

我仍然没有看到在不传递父级引用的情况下执行我最初要求的方法,即使它是通过某种init方法而不是constructor.

于 2013-09-13T08:46:39.810 回答
0

您已MyItem订阅其自身active财产的更改,以便在发生更改时通知第三方实体MyViewModel。困境在于,MyItem它并不真正知道第三方到底是谁。

相反,您可以简单地MyViewModel订阅active属性MyItem本身,因为MyViewModel它关心更改并且已经拥有对该项目的引用。

于 2014-04-15T20:21:46.457 回答