【问题标题】:Is viewModel a function or a object variable? [duplicate]viewModel 是函数还是对象变量? [复制]
【发布时间】:2012-09-15 09:00:56
【问题描述】:

可能重复:
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:{}

}

不仅如此,在实际使用视图模型时,还要实例化视图模型。

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

有人可以解释一下吗?

【问题讨论】:

    标签: javascript mvvm knockout.js


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      这样更好,因为 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)
          };
      
      })());
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-13
        • 1970-01-01
        • 2017-04-07
        • 2018-07-15
        • 2015-06-07
        • 1970-01-01
        相关资源
        最近更新 更多