【问题标题】:Binding properties of different viewmodels to eachother将不同视图模型的属性相互绑定
【发布时间】:2014-06-03 13:46:01
【问题描述】:

有没有办法使用 kendo mvvm 将不同视图模型的两个属性相互绑定,还是我必须自己编写更改事件的代码?

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 中隐藏和显示几件事,具体取决于用户是否登录。在谈论用户组和权限时可能会更进一步。如果这不是正确的方法和/或可能是不好的做法,谁能给我一个例子或其他方法?

【问题讨论】:

    标签: javascript html kendo-ui single-page-application kendo-mvvm


    【解决方案1】:

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

    http://www.codeproject.com/Articles/35277/MVVM-Mediator-Pattern

    假设我们有 2 个 ViewModel: 1.登录视图模型 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 中的任何属性等。

    总结:Mediator 在 vi​​ewModel 之间传递消息。您想要更改属性、启动功能等的 viewModel 会注册到消息中。然后,另一个 viewModel 可以向注册到该特定消息的所有类发送消息。

    希望对您有所帮助。

    【讨论】:

    • 我接受了这个作为答案,因为我发现这是一个很好的方法,我可能会使用该模式,尽管我希望 kendoUI 已经实现了类似的东西,任何人都可以告诉我如何使用它。感谢您的提示!
    猜你喜欢
    • 2012-10-15
    • 2010-12-02
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-01
    相关资源
    最近更新 更多