knockout.js - root access viewmodel

时间:2012-05-18 03:27:34

标签: data-binding knockout.js

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

示例:

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();
}

2 个答案:

答案 0 :(得分:5)

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

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

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

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

答案 1 :(得分:0)

有$ root,你可以传递给你的回调,或者你创建你的员工了解VM,或者丑陋,拥有全局(或存储库),或者没有VM上的注释,或者从视图模型中将该功能附加到员工,捕获VM的“自我”....