Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mvvm 模型视图ViewModel/Knockout解决了什么问题?_Mvvm_Knockout.js - Fatal编程技术网

Mvvm 模型视图ViewModel/Knockout解决了什么问题?

Mvvm 模型视图ViewModel/Knockout解决了什么问题?,mvvm,knockout.js,Mvvm,Knockout.js,我在读别人的代码时,遇到了Knockout和MVVM。我在这两个主题上都读了一些书,但我仍然不清楚它们真正解决了什么问题,很可能是因为我没有构建足够大的应用程序来解决这个框架/体系结构所解决的问题 我花了一些时间来理解这个示例代码-----从击倒主页。我希望有人能向我解释一下,如果不使用Knockout,相同的代码会是什么样子,以及这会有什么问题 (所以可能不是这个问题的合适平台,所以如果有其他更合适的交流,请告诉我) 谢谢 从10000英尺开始 Knockout在用HTML编写的视图和用Jav

我在读别人的代码时,遇到了Knockout和MVVM。我在这两个主题上都读了一些书,但我仍然不清楚它们真正解决了什么问题,很可能是因为我没有构建足够大的应用程序来解决这个框架/体系结构所解决的问题

我花了一些时间来理解这个示例代码-----从击倒主页。我希望有人能向我解释一下,如果不使用Knockout,相同的代码会是什么样子,以及这会有什么问题

(所以可能不是这个问题的合适平台,所以如果有其他更合适的交流,请告诉我)


谢谢

从10000英尺开始

Knockout在用HTML编写的视图和用JavaScript编写的viewmodel上的相应属性和函数之间提供双向数据绑定

假设您有一个名为contacts.HTML的HTML视图和一个名为contacts.js的JavaScript视图模型。这两个结合在一起将构成一个模块,而敲除将是将它们结合在一起的胶水

MVVM代表模型视图视图模型。我在上面提到了后两个问题。该模型只不过是世界某个特定角落的JavaScript表示,在本例中,就是联系人

综上所述,我们可能(就目录结构而言):

  • models\contact.js
  • views\contact.html
  • viewmodels\contact.js
您可以在viewmodel中实例化您的模型,然后使用Knockout将视图绑定到viewmodel

MVVM只是提供了一种分离关注点和最大化重用的好方法。作为重用的一个示例,您可以根据上下文将联系人视图绑定到许多不同的联系人视图模型。上下文可以是客户端设备的大小、用户的授权配置文件、应用程序的“社区”与“高级”版本等

通过改进可以相对隔离地修改MVVM的任何组件,而不会对整个应用程序产生不利影响。因此,分离关注点是有价值的


这有意义吗?

我想我唯一想回答这个问题(因为太宽泛而搁置)的是,看看上面的代码示例在没有敲除的情况下会是什么样子,并用几行文字解释为什么没有敲除的相同代码在大型应用程序中可能不受欢迎。谢谢谢谢这澄清了很多事情。但我也希望看到一个前后代码,它能帮助我更好地理解Knockout是如何实现您提到的功能的(代码重用、独立逻辑等)。再次感谢。@Shobit是的,那会很复杂,这可能就是你的问题被搁置的原因。我可以用文字告诉你:如果没有剔除(至少在ES6到来之前),就没有优雅的方式将视图绑定到viewmodel。您必须在viewmodel本身中编写所有绑定,使用JavaScript访问DOM元素、附加侦听器等。换句话说,您将失去声明式的功能。在敲除的情况下,您将丢失
数据绑定