0

我正在使用 KnockoutJS 开发基于视图模型的插件。有什么方法可以访问在同一应用程序中运行的另一个视图模型的功能和属性?像这样的东西:

我的视图模型:

    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设置这些属性?

或者有没有办法全局获取和设置它们?

请小心行事,因为我对这种范式很陌生。谢谢你。

4

1 回答 1

0

我同意使用范围的评论 - 但有一些快速而肮脏的方法......

当你实例化 myViewModel - 你可以在窗口上实例化它 - 然后直接引用它

window.myViewInstance = new myViewModel()

function myOtherViewModel () {
  this.propA = myViewInstance.xyz
}

当我有一些东西可以提供我想在其他地方使用的全局功能时,我会使用这种方法。它是 jQuery 和 ko 所做的......将 $ 和 ko 绑定到窗口。

如果 myViewModel.xyz = ko.observable() 然后在没有括号的情况下传递它,将它作为一个 observable 传递——它会随着它的值的变化而变化。使用括号将在评估结果时传递结果。

或者 - 您可以像这样使用 ko.dataFor 引用它。

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

}

这会将您的对象范围仅限于页面的一部分

于 2014-10-26T17:51:32.513 回答