可能重复:
Difference between knockout View Models declared as object literals vs functions
我在Knowckout MVVM框架中工作,我是新手。我一直在使用它一个半月,到目前为止一直很好。现在,我在网上和其他任何地方看到的所有示例都将viewmodel定义为具有如下声明的Object变量:
var ViewModel = {};
这是完全可以理解的。但是
最近我看到了一些代码模型,它被声明为函数:
某些人喜欢var ViewModel = function(){
self = this;
// some code in conventions with var member = {} instead of member:{}
}
不仅如此,当实际使用视图模型时,他们必须实例化视图模型。
我认为它是表示viewmodel的全新方式,我没有看到它比传统的ViewModel声明方法更好。
有人可以对此有所了解吗?
答案 0 :(得分:1)
这个答案解释了使用对象文字和定义视图模型的函数之间的区别:Difference between knockout View Models declared as object literals vs functions
答案 1 :(得分: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)
};
})());
更好,因为它不会引入任何新的全局变量(如构造函数),并且仍然具有很好的封装功能。