1

有没有办法从列表中项目的回调内部访问根视图模型?

例子:

function Employee() {
    var self = this;
    this.notes = ko.observableArray();

    this.addNote = function() {
       // need to access the EmployeeViewModel here in order to set its detailedNote 
    }
}

function EmployeeViewModel() {
    var self = this;
    this.employees= ko.observableArray([]);

    // observables used as placeholders in modal windows
    this.detailedEmployee = ko.observable();
    this.detailedNote = ko.observable();
}
4

2 回答 2

5

我假设您将在某个时候将 Employee 的实例添加到您的视图模型中的员工 observableArray 中。创建实例时,将 parentVM 传递给 Employee 构造函数。唯一需要注意的是,您将无法调用 ko.toJSON,因为当它尝试对对象进行字符串化时,它只会继续转圈。

我不得不做出一些推论,因为你没有提供很多细节,但我试图为你举一个例子。

http://jsfiddle.net/bczengel/trm7y/

在旁注中,创建多个对象实例时的一个小技巧,将您的内部函数放入构造函数的原型中,这样您就不会创建执行相同操作的函数的副本。例如,您的 addNote 函数将为您创建的每个 Employee 实例创建一次。如果您使用原型继承,则只会创建一个。这种变化也在我的例子中。

于 2012-05-19T02:14:45.787 回答
0

有 $root,您可以将其传递给您的回调,或者您创建具有 VM 知识的员工,或者丑陋,具有全局(或存储库),或者在 VM 上没有注释,或者附加函数从捕获VM的“自我”的视图模型到员工......

于 2012-05-18T03:32:45.193 回答