有没有办法从列表中项目的回调中访问根视图模型?
示例:
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();
}
答案 0 :(得分:5)
我假设您将在某个时候将视图模型中的Employee实例添加到雇员observableArray中。创建实例时,将parentVM传递给Employee构造函数。唯一需要注意的是,你无法调用ko.toJSON,因为当它试图对对象进行字符串化时,它将继续绕圈。
我不得不作出一些推论,因为你没有提供很多细节,但我试图为你举一个例子。
http://jsfiddle.net/bczengel/trm7y/
另外,在创建多个对象实例时,请注意一点,将内部函数放入构造函数的原型中,这样就不会创建执行相同操作的函数副本。例如,您的addNote函数将为您创建的每个Employee实例创建一次。如果使用原型继承,则只会创建一个。这个变化也在我的例子中。
答案 1 :(得分:0)
有$ root,你可以传递给你的回调,或者你创建你的员工了解VM,或者丑陋,拥有全局(或存储库),或者没有VM上的注释,或者从视图模型中将该功能附加到员工,捕获VM的“自我”....