我正在使用KnockoutJS开发基于viewmodels的插件。有没有办法访问在同一个应用程序中运行的另一个viewmodel的功能和属性?像这样:
我的观点型号:
function myViewModel()
{
this.prop1 = ko.observable(123);
this.prop2 = ko.observable("Hello");
..
..
}
myViewModel.prototype.func1 = function() {
//do something...
};
myViewModel.prototype.func2 = function() {
//do something...
};
和另一个视图模型:
function otherViewModel()
{
this.propA = ko.observable(456);
this.propB = ko.observable("Goodbye");
..
..
}
otherViewModel.prototype.funcA = function() {
//do something...
};
otherViewModel.prototype.funcB = function() {
//do something...
};
otherViewModel 的可观察量控制某些常见功能,如弹出窗口和蒙版。有没有办法在 myViewModel 中实例化 otherViewModel 并设置这些属性?
或者有没有办法全局获取和设置它们?
因为我对这个范例很陌生,所以请轻描淡写。谢谢。
答案 0 :(得分:0)
我同意使用范围的评论 - 但有几种快速而肮脏的方式......
当你实例化myViewModel时 - 你可以在窗口上实例化它 - 然后直接引用它
window.myViewInstance = new myViewModel()
function myOtherViewModel () {
this.propA = myViewInstance.xyz
}
当我有一些提供我想在其他地方使用的全局功能的东西时,我使用这种方法。它是jQuery和ko所做的...将$和ko绑定到窗口。
如果myViewModel.xyz = ko.observable()然后在没有parens的情况下传递它将其作为一个observable传递 - 它将随着其值的变化而改变。 parens将在评估结果时通过结果。
或者 - 您可以使用ko.data这样引用它。
myViewModel () {...}
instance = new myViewModel
ko.applyBindings(instance, $('div')[0])
// this applies bindings of myViewModel to the first div on the page only
myOtherViewModel () {
this.propA = ko.dataFor($('div')[0])
// passes the entire object
this.propB = ko.dataFor($('div')[0]).xyz
// gives you just one property
}
将您的对象范围限定为页面的一部分