Javascript 将不同ViewModel的属性相互绑定

Javascript 将不同ViewModel的属性相互绑定,javascript,html,kendo-ui,single-page-application,kendo-mvvm,Javascript,Html,Kendo Ui,Single Page Application,Kendo Mvvm,是否有一种方法可以使用kendo mvvm将不同ViewModel的两个属性相互绑定,或者我必须自己编写更改事件的代码 UserViewModel = { init: function(e) { }, show: function(e) { }, model: { isLoggedIn: kendo.observable(false) } } OtherContextViewModel = { init: function(

是否有一种方法可以使用kendo mvvm将不同ViewModel的两个属性相互绑定,或者我必须自己编写更改事件的代码

UserViewModel = {
    init: function(e) {
    },
    show: function(e) {
    },
    model: {
       isLoggedIn: kendo.observable(false)
    }
}

OtherContextViewModel = {
    init: function(e) {
    },
    show: function(e) {
    },
    model: {
       UserIsLoggedIn: //bind to isLoggedIn of the UserViewModel
    }
}

我尝试这样做的原因是:我想根据用户是否登录,在
OtherContext
中隐藏和显示一些内容。在讨论用户组和特权时,可能会更进一步。如果这不是正确的方法和/或可能是错误的做法,有人能给我举个例子或其他方法吗?

您好,我认为中介模式可能就是您想要的,它非常适合在视图模型之间发送消息,而无需直接引用它们。CodeProject有一个教程,展示了如何实现中介模式

假设我们有两个视图模型: 1.LoginView模型 2.主视图模型

我们将MainViewModel注册到中介消息UserLoggedIn

Mediator.Instance.Register(
   (Object o) =>
   {
     UpdateView(o as loggedInBoolean);
   }, Mediator.ViewModelMessages.UserLoggedIn);
当用户通过LoginViewModel登录时,我们向中介器发送一条消息UserLoggedIn

public void LoggingIn()
{     
Mediator.Instance.Notify(Mediator.ViewModelMessages.UserLoggedIn, null);
}
发送此消息将触发UpdateView(loggedInBoolean)方法,然后您可以使用该方法更改MainViewModel中的任何属性等

摘要:中介器在viewModels之间传递消息。要更改属性、启动函数等的viewModel会注册到消息中。然后,另一个viewModel可以向注册到该特定消息的所有类发送消息


希望这会有所帮助。

我接受了这个答案,因为我发现这是一个很好的方法,我可能会使用该模式,尽管我希望kendoUI实现了类似的功能,任何人都可以告诉我如何使用它。谢谢你的提示!