0

可能重复:
声明为对象文字与函数的淘汰视图模型之间的差异

我在 Knowckout MVVM 框架中工作,我是新手。过去一个半月我一直在使用它,到目前为止它还不错。现在,我在网上和其他任何地方看到的所有示例都将 viewmodel 定义为类似于 Object 变量的东西,其声明如下:

var ViewModel = {};

这是完全可以理解的。但是

最近我看到了一些代码模型,其中它被声明为一个函数:

有点像

var ViewModel = function(){
self = this;

// some code in conventions with var member = {} instead of member:{}

}

不仅如此,当实际使用视图模型时,他们还必须实例化视图模型。

我认为它是表示视图模型的全新方式,我看不出它比传统的视图模型声明方法更好。

有人可以对此有所了解吗?

4

2 回答 2

1

这个答案解释了使用对象文字和定义视图模型的函数之间的区别:Difference between knockout View Models declared as object literals vs functions

于 2012-09-23T20:40:06.993 回答
0

更好,因为 ViewModel 的整个逻辑可以包含在(封装)这个构造函数中。逻辑可能非常复杂。它可以包括不再是全局的新函数和变量的定义。

我发现以下模式:

ko.applyBindings((function() {

    // Define local variables and functions that view model instance can access and use,
    // but are not visible outside this function.

    var firstName = ko.observable("John");
    var lastName = ko.observable("Doe");

    var getFullName = function() {
        return firstName() + " " + lastName();
    };

    // Return view model instance.
    return {
        fullName : ko.computed(getFullName)
    };

})());

更好,因为它没有引入任何新的全局变量(如构造函数)并且仍然具有强大的封装能力。

于 2012-09-23T20:48:04.213 回答