1

我正在寻找一种智能设计模式,用于将站点范围的变量加载到 ViewModel 中以用于项目中的多个视图(以 DRY 方式)。模糊的问题,一个例子可以澄清事情:

在我的项目中,我有一个局部视图,显示来自客户端服务器的常规和错误消息。消息与 Knockout 绑定绑定,如下所示:

<p class="message" data-bind="visible: (message.length > 0), text='message'"></p>

这意味着我必须在每个 ViewModel 中添加相同的代码:

viewModel.message = ko.observable("some message from server or none");

这不是干的!

如何以一种聪明的方式解决这个问题?对于这种情况,是否有任何智能设计模式?

我已经知道一些“不太好的选择”,所以请保留好的选择。:)

4

1 回答 1

0

您可以使用 扩展模型apply。可以使用其他扩展方法,但这对于 Knockout ViewModel 来说很短且足够。

jsFiddle

A 和 B 都扩展 Base。您可以在一个 ViewModel 上扩展多个类(或接口),任何扩展基础的东西,也可以获取其基础的成员,等等。

在这种情况下,我们的 Base 有一个errorobservable。我们还可以给它一些与我们的服务器交互的功能,等等。

function Base(){
    var self = this;
    self.error = ko.observable('No Error');
}

Aextends Base,并且可以在不定义错误的情况下访问错误。

function A(){
    var self = this; Base.apply(self, arguments);

    self.greeting = ko.observable('Hello');

    // Change the error
    self.error('A has an error');
}

B也 extends Base,但是只使用 HTML 中的 observable (见小提琴)。

function B(){
    var self = this; Base.apply(self, arguments);

    self.data = new Date;
}

ko.applyBindings({
    a: new A,
    b: new B
});
于 2013-07-09T23:15:10.123 回答