MVVM与Backbone demo
MVVM
https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93viewmodel
aaarticlea/png;base64,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" alt="" />
Model–view–view-model (MVVM) is a software architectural pattern.
MVVM facilitates a separation of development of the graphical user interface – be it via a markup language or GUI code – from development of the business logic or back-end logic (the data model). The view model of MVVM is a value converter;[1] meaning the view model is responsible for exposing (converting) the data objects from the model in such a way that objects are easily managed and presented. In this respect, the view model is more model than view, and handles most if not all of the view's display logic.[1] The view model may implement a mediator pattern, organizing access to the back-end logic around the set of use cases supported by the view.
- View model
- The view model is an abstraction of the view exposing public properties and commands. Instead of the controller of the MVC pattern, or the presenter of the MVP pattern, MVVM has a binder. In the view model, the binder mediates communication between the view and the data binder.[clarification needed] The view model has been described as a state of the data in the model.[7]
- Binder
- Declarative data- and command-binding are implicit in the MVVM pattern. In the Microsoft solution stack, the binder is a markup language called XAML.[8] The binder frees the developer from being obliged to write boiler-plate logic to synchronize the view model and view. When implemented outside of the Microsoft stack the presence of a declarative databinding technology is a key enabler of the pattern.[4][9][clarification needed]
国内权威解释:
https://linux.cn/article-6481-1.html?utm_medium=weibo
MVVM代表的是Model-View-ViewModel,这里需要解释一下什么是ViewModel。ViewModel的含义就是 "Model of View",视图的模型。它的含义包含了领域模型(Domain Model)和视图的状态(State)。 在图形界面应用程序当中,界面所提供的信息可能不仅仅包含应用程序的领域模型。还可能包含一些领域模型不包含的视图状态,例如电子表格程序上需要显示当前排序的状态是顺序的还是逆序的,而这是Domain Model所不包含的,但也是需要显示的信息。
可以简单把ViewModel理解为页面上所显示内容的数据抽象,和Domain Model不一样,ViewModel更适合用来描述View。
MVVM的调用关系和MVP一样。但是,在ViewModel当中会有一个叫Binder,或者是Data-binding engine的东西。以前全部由Presenter负责的View和Model之间数据同步操作交由给Binder处理。你只需要在View的模版语法当中,指令式地声明View上的显示的内容是和Model的哪一块数据绑定的。当ViewModel对进行Model更新的时候,Binder会自动把数据更新到View上去,当用户对View进行操作(例如表单输入),Binder也会自动把数据更新到Model上去。这种方式称为:Two-way data-binding,双向数据绑定。可以简单而不恰当地理解为一个模版引擎,但是会根据数据变更实时渲染。
MVC 和 MVP
https://linux.cn/article-6481-1.html?utm_medium=weibo
用户的对View操作以后,View捕获到这个操作,会把处理的权利交移给Controller(Pass calls);Controller会对来自View数据进行预处理、决定调用哪个Model的接口;然后由Model执行相关的业务逻辑;当Model变更了以后,会通过观察者模式(Observer Pattern)通知View;View通过观察者模式收到Model变更的消息以后,会向Model请求最新的数据,然后重新更新界面。如下图:
MVC模式一样,用户对View的操作都会从View交移给Presenter。Presenter会执行相应的应用程序逻辑,并且对Model进行相应的操作;而这时候Model执行完业务逻辑以后,也是通过观察者模式把自己变更的消息传递出去,但是是传给Presenter而不是View。Presenter获取到Model变更的消息以后,通过View提供的接口更新界面。
关键点:
- View不再负责同步的逻辑,而是由Presenter负责。Presenter中既有应用程序逻辑也有同步逻辑。
- View需要提供操作界面的接口给Presenter进行调用。(关键)
Segment解释 ViewModel
https://segmentfault.com/q/1010000000534091
而MVVM派的看法是,我给view里面的各种控件也定义一个对应的数据对象,这样,只要修改这个数据对象,view里面显示的内容就自动跟着刷新,而在view 里做了任何操作,这个数据对象也跟着自动更新,这样多美。所以:
ViewModel:就是与界面(view)对应的Model。因为,数据库结构往往是不能直接跟界面控件一一对应上的,所以,需要再定义一个数据对象专门对应view上的控件。而ViewModel的职责就是把model对象封装成可以显示和接受输入的界面数据对象。
至于viewmodel的数据随着view自动刷新,并且同步到model里去,这部分代码可以写成公用的框架,不用程序员自己操心了。
想好说清楚,最好就是使用用例来解释MVVM是如何工作的,下图以AngularJS为例。
如图所示,
App.html
是与app.js
中的ViewModel
绑定的View
。如果有人想要修改app.js
中的$scope.user
的name
属性,那么它会自动更新app.html
中对应的name
属性。反之也成立,如果有人想要修改app.html
中的name
属性值,那么也会自动更新$scope.user
对象。App.html
同时也可以对app.js
发出命令,如调用$scope.save
函数从而让app.js
执行一些逻辑操作,如保存$scope.user
至users.js
模型中并与后端同步,那么它就可以与整个应用程序共享。
MVVM
模式对于RIA
应用来说是非常必要的,因为View
被绑定至ViewModel
的,并且当ViewModel
的状态变化时,View
会自动更新,它有效的隔离了View
和它背后的业务逻辑。这也是为什么AngularJS需要双向绑定的原因。
知乎解释
https://www.zhihu.com/question/28893576
去年暑假实习一直在做MVVM的开发。就我所知所有的后端和业务逻辑都应该是在M端的,写界面XAML是V端,前后端之间可以互不干扰完成设计/开发,最后再加一个VM,而VM做的事就是衔接V和M。Wiki上这一段很清楚地解释了view model的作用,也就是把model中的数据对象转换成view可以直接使用的形式(比如string或者collection等等)。
视图层 V,展现数据,绑定事件,视图模型层 VM, 从数据模型层变换而来, 除了数据或状态flag,还有许多事件回调,$watch回调(当某个数据变动时会执行的函数), widget的配置对象
模型层 M, 这是通过AJAX请求得到,或者通过后端输出时就打印在页面某个script标签内, 都是数据(JSON),没有函数
业务逻辑层 BS,这不归为MVVM之内,但它们应该使用类进行组织,在VM中的某个函数里面被调用。
Backbone
http://backbonejs.org/#Getting-started
Backbone.js gives structure to web applications by providing models with key-value binding and custom events, collections with a rich API of enumerable functions, views with declarative event handling, and connects it all to your existing API over a RESTful JSON interface.
When working on a web application that involves a lot of JavaScript, one of the first things you learn is to stop tying your data to the DOM. It's all too easy to create JavaScript applications that end up as tangled piles of jQuery selectors and callbacks, all trying frantically to keep data in sync between the HTML UI, your JavaScript logic, and the database on your server. For rich client-side applications, a more structured approach is often helpful.
With Backbone, you represent your data as Models, which can be created, validated, destroyed, and saved to the server. Whenever a UI action causes an attribute of a model to change, the model triggers a "change" event; all the Views that display the model's state can be notified of the change, so that they are able to respond accordingly, re-rendering themselves with the new information. In a finished Backbone app, you don't have to write the glue code that looks into the DOM to find an element with a specific id, and update the HTML manually — when the model changes, the views simply update themselves.
Philosophically, Backbone is an attempt to discover the minimal set of data-structuring (models and collections) and user interface (views and URLs) primitives that are generally useful when building web applications with JavaScript. In an ecosystem where overarching, decides-everything-for-you frameworks are commonplace, and many libraries require your site to be reorganized to suit their look, feel, and default behavior — Backbone should continue to be a tool that gives you the freedom to design the full experience of your web application.
Backbone Demo
todolist
http://backbonejs.org/examples/todos/index.html
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAw4AAAHYCAIAAABr2CgBAAAgAElEQVR4nO3dXXcUZbr/8bwDXgoHfdSLxWLlBJfjGl3MogdBHGS22xGZLaPmT7ATkh0UjCSg0kzGCIIgRJ5idowyGpAdIGaAGAIBEgIhCZBoExID0xEawrb+B9VdT11XdXV3Ov30/azrwIF6uKu6p+vHXXfdVaQAAADArL+///r160NDQ0WZbgkAAEDWISoBAACIiEoAAAAiohIAAICIqAQAACAiKgEAAIiISgAAACKiEgAAgIioBAAAICIqAQAAiIhKAAAAIqISAACAiKgEAAAgIioBAACIiEoAAAAiohIAAICIqAQAACAiKgEAAIiISgAAACKiEgAAgIioBAAAICIqAQAAiIhKAAAAIqISAACAiKgEAAAgIioBAACIiEoAAAAiohIAAICIqAQAACAiKgG5o7nEkzYlzZk+OsHFwOKcai+AfENUAnIHUSkH2gsg3xCVgNxBVMqB9gLIN0QlIHcQlXKgvQDyDVEJyB1EpRxoL4B8Q1QCcgdRKQfaCyDfEJWA3EFUyoH2Asg3RCUgnwhhanHgYqZbljSiEoDMIioB+YSoBAAzjKgE5JOZjkqhgdNHAlVvrFz09ML53ujWvPMXPr1o5RtVgSOnB0KptDY0cHpvzRsrF+nbnlf89LJVNXuN252BqJS2owiPdx/7PFC1atnTxi1HDkTd+ufHzgVTOkkAMo2oBOSTGYtK4eETO976o/nyb8c7/49le/81HE5884G/LHTY+rzfvRY4OaooqUWl9B1F6NLhDS86HYBp8wtf3HD4EoEJyFFEJSCfzEhUGj3pHGPsssCave6jwOh3lc+62nzxyzvOhpKNSuk7inBvw5rEthzZekNvopESQBYgKgH5JOWoFO7a9XJxoikgEgXWNbrolxltLklk+94lJWsW2f2FY1RK51EkeAAmxSXNoy4/CABZg6gE5JPUolK4q+6FecnGADdRINwVWJJwd4w9OSql9Sgu1qV2AN4ldbk7wh4oUEQlIJ+kEpXCxyqT7i4xRIFAl9gpk2rOMJKiUlqPIvxd+YKUt72qgZ4lIKcQlYB8knxUCrdXPyNd3ef94a1Ay7mb42FFUZTw+M1zLYG3/iB23DxT3W4blsabS8Scoe4h8qhYKHiuJbAmznAm+6iU3qMIN5fYNWreH8p2Hjs3GNmyuvFLp/eKw76fqT3r7tMEkBWISkA+SToq9e96yf66Pu+F2pO2vSChswHhPpf3pV39scsP7XrJPpQIw4PCw41Og4Jso1Kaj6K9+qnY5V7eK3YShc5+aNuNlsvTXAEFiKgE5JNko9LZWtvOGMfbaQ5DjxaUf2ddTUpK9rkqzvY99lEp3Udhd3YXVB6TN60oZ2ufiUyx9HZV4PPGr09fGhxkniUgtxCVgHySXFSShuBIt9IMa3Z9aPsov7ek2bxmuHHNTLbMLiql/yi+WWcTqbxLqltTm4kTQHYjKgH5JLmodKzSNmOsahiPv8fxg6vtumSsnS229648nuU7xC4l5xVtolL6j+JK3RLbtng83vm/X+lnZm4gPxGVgHySVFTq+tB25iJXGUNRxhtW2a296MMuw0JCp5J5IXu2XTk2UWkWjkK6w2finb9w2aq3a3Z+ffoSuQnIC0QlIJ8kFZXsV3ITYxRFETOKKcuk8HYSt6vOwlE4jBsXqL1NLXQ2AbmMqATkk2SikpBFXHbHiD1GS+quxN2Hqxe52R+TddXZOApFSXpuqCTflQcgCxCVgHwyg1HJVYxx2KlpnxmLSjN6FCp5foG4vAv/suMsHUxAjiEqAfmEqJTOo9CEh0/scJi+0lGcqQsAZB2iEpBPkolKwoxHrm9dCSOiZ/kG3GwchUV4vLsl4F/5u4QjU3HlMcISkDuISkA+ydZh3cJj9i/tGoq7eWHVzAzrthcKnjv2ecC/clGx29Tk5sABZAmiEpBPkopKqY2IdtcdY9+wp6rb427f7WQBs3EU8YXHb5479nmg6o04ucl1bxeAjCMqAfkkA1NQ2mcM6xSUQt9Q/LehzdIUlO6OIkGhgdM7V9u/x851bxeAjCMqAfkkuagkzFXt5pUg7dW2kzLGZgwhyDxTe9Zx+wm82CTtRxEevzk4eO5YY+Pngaq331617OmnF873xkti4eYSd71iALIVUQnIJ0m+LldKGcm+aNYmAEmhx2kX0rvZhKiR3qOQ3vcb79zaZ8T43WkAsgVRCcgnSUYlsV/F4/EuqT45areKPL2Qd1WDzRpyB1FxSaPN3Izhrl0v29+88ng89r0y6T2K/h3LE9u2oijh4cNrbI96TSPPwAG5gqgE5JNko5KijDasEmehnveHtwIt526OhxVFHbjcEpBnFfIuqRN2Jgy81vegvv4jPH7zXEvtXxY6T4ptfwMrrUcx3lwihL3Itge195eEx29eOn1E3L539UFGdQM5g6gE5JPko5JzzHBNDkqKooSPVTr0EyVGGuuT1qNI9BVwAuZVAnIKUQnIJ6lEJUUZ/a7y2VSigPfZyu+kW1EqcVxQwuRh0Wk9itHmklTTXvG6b+hSAnIJUQnIJ6lFJUVRRk9WJ5llnIbsmPaQYNgoLglstLlx5/gEWTqPItxVl+wr4DweT/HLu3itCZBjiEpAPkk5KimKEh7+ZkOC7zeb94eyxl7XCSA8/I3bfp/il3d1hW3HOMV72D6dR5HAARh5n12XwFkCkC2ISkA+mYmopChK5IWwf5wfNw945/+x7PClUPwNWrff21jmvPl5v3stoHbwJBWV0n0U4fHuw3GOwLT9t3acsHnMD0AOICoB+WTGolJEKHju2M6at1cte3qhngq88xc+vWjlGzU7j50LJh6SDCLvm130tPYOkHnFkS13j+u5IvmolP6jUF//VvXGykVPP216k4l3/sKnn1626u3UzxKADCMqAQAAiIhKAAAAIqISAACAiKgEAAAgIioBAACIiEoAAAAiohIAAICIqAQAACAiKgEAAIiISgAAACKiEgAAgIioBAAAICIqAQAAiIhKAAAAIqISAACAiKgEAAAgIioBAACIiEoAAAAiohIAAICIqAQAACAiKgEAAIiISgAAACKiEgAAgIioBAAAICIqAQAAiIhKAAAAIqISAACAiKgEAAAgIioBAACIiEoAAAAiohIAAICIqAQAACAiKgEAAIiISgAAACKiEgAAgIioBAAAICIqAQAAiIhKAAAAIqISAACAiKgEAAAgIioBAACIiEoAAAAiohIAAICIqAQAACAiKgEAAIiISgAAACKiEgAAgIioBAAAIEp7VKoHAABIpzRlGNVsRKWrV68ODAwMDg4OAwAAzITBwcGBgYGrV6/mQ1QaGhoaGRkJBoNjY2NjY2N3AQAAkqXGiWAwODIyMjQ0lA9RaWRkZHx8/P79+yGzKQAAAHcsKeL+/fvj4+MjIyP5EJWCweD9+/cfPnz4+PHjx48fTwMAACRLjRMPHz68f/9+MBjMh6g0NjYWCoUeP378f2a/AQAAuGNJEY8fPw6FQmNjY/kQle7evTs1NTU9Pf3bb7+laS8AAKBw/Pbbb9PT01NTU3fv3iUqAQAAmBCVAAAAREQlAAAAEVEJAABARFQCAAAQEZUAAABERCUAAAARUQkAAEBEVAIAABARlQAAAEREJQAAABFRCQAAQERUAgAAEBGVAAAARIUTlQaaK9eqNn1703k701cO+NdqPmgLOi49eaY+smRl84D6R1cOuFw3XR6NjU1kZMdZR/so1h64Mnt7nb43dvfB7O0u49+3ZGXm00m76Qc/97Y11m/ZWBH9HfFXbHxv+2etncO/PMp04wAkrnCikiH/bDs15rgdPVWtXbt27dr6M5MOC0/37I8u+Nn5yOUxg5eu6Xs32vZUl+fXpScFs34xfjR28cuPKvyz+skTlbJHaKht10bDv7Ssyrd+2XN3OtOtBJCQwolKyoPzn8VkGls3v91k/nVzXFzPVXqkytila+yHv/vz7NKTolm+GPd/WZ6BT56olCVCVw5UySlJ49/W9hNpCcghBRSV7O6U2Qm2faAuVVdXF/llO3BF/GH76fstsZepjF26tLbnyaUndbN8Mc7MJ09Uygqh859p3Un+jf9o6Rwem1Lvt00/GB++2GrsbapqHiAsATmjkKKSIUhs+f4naSNaoKo/MxBdXo5WevwyjoAiKmUNolI2y6uoNNL6vtZr9P2I3Zik6Z/O7NR6neo6GE4I5IqCikqGW2vi+CPtNt2W73/Sb65JI8H1AVCmNEVUyhpEpWyWT1FJ/3Fx+hRCPftjb9gDyHKFFZX07CPdU9OyT2XzgDEJCb9+wvaISlmDqJTN8igqjZ3a5ioC6Y+B5NqHBRSwAotKevYR+omi2ScSffSh4La/f3oyMY/8tl66Ho31tn2xPfrocHnVe9u/aOsdi/PY8KNfhi+2NdZvea+qPHo9WVte9d6W+kabdfVrjpXbH2RtC+pF69Ev1zsMjzv7KzZu/6Kt9+cHcQZYTN+73dn62Xa9zeVV723/rLXz9r34IzOSX3f6wc+9bV9oa5ZXbalvuaieozgX40djveZzHHmqu2Mg3sdjpn8TYtjtN7Jb7WFyf8VG+8/VHcv3bfre7c6W+s3a121LfaOLj27GWxWV/KeTZKsy/1V22ixRCcg9BRaVDNnHdsYArRM9Gn30sUg2j8GJQcp46QoNtf5dzzpG5X9vsx3RoCjTd3u+3Gq/UoS/pvnqPbt+rBhJRKVHIx07hQd5yre2XAvZb2D63g3pSNWjbR0S1kxp3em75/fbP5xd/ve2kUfyxXj6bs/hGoenuv0b9593/VS3+6j0aKxTaG/CO9W4+r45bjodrVKUFD6dVFqV0a9yHMFT2+xu2QPIaoUWlZyzj3bB06OP9kc2t+z6DgtdVNpv9Zb9B7Y5XI3X+j87H/ObO/3TKYefaYMPvtefOJ7BqPTBNscm27ZZmb7X4+Ix6aoDV2wuMSmsO/1Tm/P5ra+vi/63+WL8oO+wi8e67Rtsw2VUCg1963xy165N5lFy19+38r//YPNteDTyfTpalcKnk9q5ytxXOQ7jXAL0KQE5pOCikt5xFPuvOi1GGX/G5OXlv7EEF//GXa29o+pzw4+mRnu/NkSh91tHzOtOnKnXpvit2dfWO3oveqdg+sG9seFOQ3dTbHpLYaySpc3lW7/UnnV+NDV60djLFdPm6Z++15KCerCT2lPS90Z7277QVo69tKWwrnFVtcHj6rl6NDXa22qdCNB0RgxPK23c3zE8ZjzJo72tek9EzLG6PIt2V0LDkF5ze6cfjJs+2EQvxNagbNj29IPx6x379N4z/7ZTloYZW6V+6tGT8WhqbLiz5R/aeUysVSl8Oimeq0x9lZ1Px72ew9oxM7ESkFsKLyrJj7VpScn8F9rylhkGtHGcsYnF+Ftt96to/D223LvTr+HShWn67um6yCIxGW2GolLVgZ6YARnGNltuXk501DmsqCiKooSufRk5Lsu/5FNY98GFvX6ndS2dJcYzoo/B3dlpe5L1ZiX2r3+HqDQ90BwNYP6aZrt7P8ZOh4Tm3TFlA7vvjbF/p/LAFUN36vS1L6NPJghPuCvTP3XUR5Z5/9ubbluVwqeT6rnK0FfZgWmWgOR6pABkUAFGJX1otzmlaCOPLAFEGJGk/3HsnTzDb7Uwe4q+tnlv0kBxE/1Cbw1EMxOV4rbZf7jP8OdaunO8kOrXZOPmU1jXcApNF38jQxed6Yzo50mISsmSo5LhxTrGO6eWhfSLuNO8p+JeHc6jPj+if+8F7XRpgcb5sq8liMovr7lrVSqfTqrnKjNfZXlx0x11chKQgwowKhl+J/f36L+H2s9zzDXKfniT1tlk82yc/lstPjisz8KSxGPSlkd8dDMSlRJss7ZPh3k9FUUxnDH9NKawbtyHGS1Lmdqsf6SRuyz34j8f5ooclfQX4Di+J0fK0O726rRtQ/+RFg/002P8v4INocdVlNKnk+q5yshXWWLs/hJ6yABku0KMSvrvvvEX1uHXz25ot/Zba3eDRvutli93iYaaR1OTk6MDPR2tDfVb9NkD0hGVEmyz4XXBbmlXz1TW1RvjeJXXQ5HpjBhuD0WVV22pb2jtGIgMKkuOGJX0dsR5WbPeZRjvrc42e3VcRU8WWuP01/K4Fj8cKEqKn06q5yoTX2XBgysHoqmPnATkroKMSvoPpX5B06KP3T9EYwdwO/8r28WUgPFCzaOp0YGO1iOfbX/POK+SVTqiUoJtdnj2K26zU1lXf+rLuQdA6oELXTksPodeXrX9s9bO4V8Sz0ziWXT/ySQxn6TYy2imPbGpdSvJD06K3LUqpU8n1XOVia+yPX3ok7/+DO8xAXJWYUal2PmTbMKTkXVot/bvT/t/t6YWlR6NXYwzq5L4Q12IUSnOtVvbR+wZeTR2saW+2uFMO0y9k+hZzIaoFNuG9EelZD6dvIlK9m+IBJBzCjQqWWfljjcUQx9UoWYrLTrZ315IISoJc9GUV7333pb6hiOtHX3DY1MX0zlWKenrS5zhLo4bTHxdt/0W2kclnZHpB+PqtOi2vXcJPtad1VEpdh4wtycxYSl9OpmPSol/HW1pJzz339sCFLZCjUpa9tn07c24nUSKYZyH/3Cf7VSVJslHJX2ugLXlW79o6xwYnYwdcZzeJ+ASbLM+Aibxfzmnsq7L65o+/sTFGZl+cG90oLOtUXspyNq15gfG4prJsUruX6ea6FglbTF9dLO7IUiupfTppHquMvFVtpWz7+YDYFaoUUn/Wdx2aszax2THeIdOW1f6BUw6KmmXLsfODPnpuQxEJUNrEpyuMbV19Y4+xwfY9YepEjojximbE3kDRYafgHOaYcBwwrQtGx6aTyQQxpfapzNTT8DN5lfZDlEJyBMFG5X0f7ru7/kp+rvp9MOs/Yzu77kW+SUX/+2Z9G+1m99W4zzGyd/mmbk2Gy5slft75KE9+tqGLoAU1tUfYpPnBDKeK0Ob9UTqEC1Gjm2OLGSaesdZpudVkk+FPomRccuGWRPkVhkf5HIb4FL4dGZuXqVZ/SoDyF+FG5W06+WmpqbP3PzuRX9Gtxw4sC3OVSP1qCRcX6bv3TC9GCsropLxrqE05bPhhV7m/osU1jVO6Wy3qnmKZFObtUui2Hs3ffPbaMMSuRy6m61bmIfQOAWP67keTXuVjsj4PjXz7IrGWROECaqn757fG22X+96WFD6dVM9Vhr7KAPJWAUcl/bab3x/nh1VRFNM/ddXV5H/2J/1bbZ4ase36WHSOH+vruITt61ut3H8+sWfdU3lqz/TuWf/Gf7Ro79yKNHy7Pguf9R1kqaxr7JYwv2hvzPTis9g2Gx52Mr/pSx2v1HFYWzmxy6EeWj44dtM6yMz9e83cvzLDsteYr471hWuxwUN/1/1adYCcNiGn+tYzw3msOtyXwLlI/tNJ8Vxl6qsMIF8VclSyZJ+4Qzn1oRFr1651vFuX/G+1uxfei1cYa5xzc1gpt1lRrC9vENn2EKSyrtPsSGvXrvVva/veflh3vLfeO+3Ugc3z5sbvibF3R250wnMV6p/dgcNO2xf60OKcROeVnST96aR2rjL3VRb2wVglIMcVclQyZx8XgzAMfT7Ot2VS+a223JiIuTZs/EfLxRunpflajHcuIlw+25TytJnTd3scp4Mq39py1f4FpKmtGxpqs76mPnqqDl8JOTxIHxpqdbwmlm/9suduog+NG99rprJ8RI9GOuybq+6z+ovOsYRnvjR+dlLC8G/c1WH/Olz1XAgn0c3KTpL+dBQl6XOV0a+y3T6ISkCOK+ioZLrf5WYUrf6EjPN8Man+Vj8a621rrN+yUXtkvbzqvS31DfoE0vq7T2MHj4SGOr7YHl3VX7Hx03+5ej/GDMwwrijKo1+GO1s/2/6eqekup75OYd3pe7c7W7QT5q/YuP2Ltl71Mup8MZ6+d7uztaF+i2FKdPcNFtpyt6dFn6SpvOq9lv6YRR78bP6AU9yn5bObvndD/wr4KzZuqW/pvB3/0h5tlX4u/BUbt9Q3tvX+nNob8pL+dIytSuBcZf6rbNkHUQnIcYUdlQAAABwRlQAAAEREJQAAABFRCQAAQERUAgAAEBGVAAAAREQlAAAAEVEJAABARFQCAAAQEZUAAABERCUAAAARUQkAAEBEVAIAABARlQAAAEREJQAAABFRCQAAQERUAgAAEBGVAAAAREQlAAAAEVEJAABAlG9RaWxsLBQKPX78+P/MfgMAAHDHkiIeP34cCoXGxsbyISoFg8H79+8/fPjw8ePHjx8/ngYAAEiWGicePnx4//79YDCYD1EJAAAgfdKUYVRpj0oAAAC5i6gEAAAgIioBAACIiEoAAAAiohIAAICIqAQAACAiKgEAAIiISgAAAKJMRqW/uTP7DQMAAFBlOCrNyDIGzevmL1y26u2anaeu2y8w3vVloGrVsqeLy5oT2a6Ni4HFHo9nceBiitsxaS4xbtP8vwqcer5LEvrYQpcO1zVeSVeLAAAFIUujUmVl5dDQkPMydppLPKoFlcfs/n5o10uRBRK75togKs2uxKPSt2XzOH0AgFRlY1RqamoqKiqaM2eOwzKC5hKPx7No8WKvfVYa2vWSx7t48SKiUu5JPCpx+gAAMyDrotLk5OScOXOKiooqKyulZWTq1bG6drVtVurfsdzjLQl8mPidHBtEpdlFVAIAZERWRKXKysru7m71v5977rmioqK5c+dalnEncnVsP2iXldSk1NwVc80ND/9r74aVixbO96o35+YVL1q5obE3bNrs4kBX167XfjfP4/HOX7TldGxUGm0uKfZ4PMWrGwxrmrnaUSJRKXSpJfDWsqeL56nb885fuOytHSdHjXs8seOtZZG/j9md1Ep9He/838esErp0eMPK36vH4J3/+5UbDl8K6X+rRZrRk4HXfj/f6/F45/+xTN1E6Ozet/443+vxeOYVLyszbDZ6pOGuXeo6nnnFy8r2nh212a59Q+YVL3trx4nhsHGDOn21mIMzNR4AAKvMR6Xdu3ert9u6u7vVW29FRUVackouKl0cb1gVM17pYmCxx1vSHLZecyMRJ8aCkuZxw2YXl5QsjvyNd/XBcUtUGm1et9Dr8RSXNA6LScTljlxHpXBXYInXboPaKuPfrIvdo/elXf3yGbTdqHdJXbQRkQO1/P3Cdc3RVKOelzUfWjZTXPndWeuWiyuPhY1HurF6lWXTxSWW7cb52LTl7aOScHCBrnjpEQBQuDIflSYnJ+fOnasmJOOtN+MyrmnhIjYrna19xuMtaQ5br7lna5/xeLxLqlv7x9ULZih4bu/qYo9xmciFNxqEwuGw6QaclpOaRxWZ6x25jErjB1d7PZ7i1XvPBdV+kfB4f2v1Eq++znjDKo/Hs2DNF5E9hgZaN8a5a3i29hmPx+N9dt3hc8GQooTHu/euWeiNpENFGW8uWeDxeLxLqlq6x8OKEh7vbqla4vVoC0TPi8cz74Xa1oGQooTHf/hwidfj8Xq93mfXHe4eDytK6JJ64N5135hOsEdfYuCryme9xjhl/tjUhmjtVMLj/a2Bl4sN7bA5feomil8ORD6CUPDc4XXPej2eZ2rPOnxwAICClvmopCjK5OTkggUL1LSk3XqzLOOOfnUc2vWSKStpScnVoBf10r2m0djp4VnVMG5YJBqVTjavW+g19ask3GDLjlIZq6S2atGHXYoSfd5vwarPomEqrvbqpzwez/Idxm6n8MmNT0XaGM1ejaZDjeSnl3YN6S3wvLxXXybcuMbjsQSSrg8XGU6pehq8qxqMGx5tWOXVP0PTx6Y2xLgPRVGU8HflC7R2xJ6+9uqnPJ6nNp40dyH171guPjAJAEB2RCXVihUrjLfebJeJx3B1NGclPSnZR6Xw+M3Bc8caGz8PVL29allkMJE5s0TyR5S6mQXFxV7zvaQ4XOwosagUCg5eOv11Y+POmrffWLkoMiopcnT9u16K3m/yzl+47K3AkdPRLi1bagKR96gmKS3YaZpLPNq5thvuriYh0yk3L2ZJjHbNMX1sxyoXxNx8026ombqq9IboE0XYWFLH9EsAAFtZFJUURbHkJNtlHBmvjsas1F79VDQpxUSlcG9j2R/m2V0/HTNL9EaT99k1qxd7PJ5nqtvjhKWEdxQvKo2eDPwlduCQKZWMngy89jvzPue9UHtS6ACL91SfTeQxrKf+eQpRKWbDxhNg+tgsQ5HsD95y+qIfmC0elAMACLIrKiW3jIHp6qjfWjlWucCzoPw7u0Ev4WOVxR6Pxzv/j6vefrtmZ2Nj47Fzg8HDJS6j0lNvHx1Vwu3Vz8QNS0nsyDkqRbqM5v1u5RtvVwU+b2z8+vSlmz98uNgmdIQGTn+9s0bvdNLOhUWGe5WsUUntB4p0+Jg+tm/WeePfNbOcvit1SzyG23MAALiSZ++AM18dLwYWezxPVbe3Vz9lSAfmqKTeyjFf/cNdauBwEZUifxjJQYs/lJ+lSmJHjlFJzRGWu4KjjWsW2Hf8RPd45R/LHTZqN1YpMgRoQeWxBMYqJRWVLAnOYaxSZBSWkPiMezU0RP0ELAcHAICzTEalNLC75/LU8uXGpGSJSmo4eKb8q4GQoqgPRWl3ydxHJe25fDksJbEjx6gUiS0v/eOH8bASeQRMux2nHl179VOWZ+4G1EfkovciY+lPwHWrD4kNnN65utgTHYwVfQIu+vfiE3BJRSX16TT1sblu9dk0S+7Vn4A7uNrrUR+z69eP/+Vi41wIzSUej8e7plEb0h45uIVrog8Nao/AuR5qBgAoOPkdlbTxKcb+B8sNOPXmma2nqtvtN6tvxjgFZeOaBQ6z9CSxI+cbcGqni73Ik2WjB1fbjI0yzJJk00zbqYf05/ts51WKnf8oqai0eIll18aT6W46rHkv1GlrqA/ZeTwej/flPUPiwSX99CIAoCDkeVSKdCSY7tTEPAGnTSvtUSe09gdaur9Rb6gZr+TxonrXynAAABvpSURBVFI0vMhJJNEdxRvWHe5tLIvOxO2dv3DZqpq9//phx0vGbiN1cuqF2k6XvRU4Gm+67ngTWpsnyV5kO1t3kmOVtFHolsm3FZuPTVFGz+41TBu+0LqGMvrdBnVucO8ftkXvU4Z7jwbM05czXTcAwEmeRSXkJunROgAAMo2ohCxAVAIAZCuiErIAUQkAkK2ISsgCRCUAQLYiKgEAAIiISgAAACKiEgAAgIioBAAAICIqAQAAiIhKAAAAIqISAACAiKgEAAAgIioBAACIiEoAAAAiohIAAICIqAQAACAiKgEAAIiISgAAACKiEgAAgIioBAAAICIqAQAAiIhKAAAAIqISAACAiKgEAAAgIioBAACIiEoAAAAiohIAAICIqAQAACAiKgEAAIiISgAAACKiEgAAgIioBAAAICIqAQAAiIhKAAAAIqISAACAiKgEAAAgIioBAACIiEoAAAAiohIAAICIqAQAACAiKgEAAIiISgAAACKiEgAAgIioBAAAICIqAQAAiIhKAAAAIqISAACAiKgEAAAgIioBAACIiEoAAAAiohIAAICIqJRWob6+G5nad/hWR1N9zYaKstLS0tLSUn951YbawxeU4/Xq/y6tPnQ50U3GXTd8q+/aRMotBwAgexCV0iR8q+PQ9nfKSuuPZ2b3PYc2+0uttjbfTFtUCvV99+nmcn8SWwUAIIsRldLi6pe1kaCSmag00FQbk5NKS9fvbnfRM+RAXvfUp2VJbxUAgCxGVEqLy4eqSzMYlSaOBqLxqGJ7y+WJsKIoihIOhcKpRSVZerYKAEDGEZXSIsNRSd/91uablr8jKgEAkACiUlpkTVSK3T1RCQCABBCV0oKoBABAfiiUqBS+1dWyP6A/Ol9aVrGhJrC/petWeEbX1SJDjNgMERo83bTzg02RzfrLq2rqmzrUbYrJI/oX1YcuK0rwTFP95nK/1qTDzfuq7XZtSk3WTYf6Thyqr6lSN1NaVrGhpv7Qib6Q7ZmIbZYeyqT9AQCQ0wogKoVvdTTUlkkX9NKy2oYzwRlb121UCp4Rtuuvqjt6LewiKvXETAew/tOmg4lFJbEVpWW1h7pj4xJRCQBQcDIZlf7mTkr7CN9qra+Q40NERf1xm7SUzLquopL9pEfGTdZ/FLuWafubtm61Nm3Dvk6H4BIblTbV1Tu2wh84aj0pRCUAQMHJcFSakWVk4R69m8Vfta3hxIWbd9S+kvDE7QsnDtVXR/tU/JsP9YRnbF3HwULh9t0V5g2r2w3duXCi4UNLAJKiUmTtushMAKE7F9rP6fOCuxqrZN+CvYZupncazgvrxtxNZKwSACBPZWlUqqysHBoacl4mPn0ixor6VvtBScFTn75j24mSyrqOWUXfsH/zvthbf8FTuzca+nocopJ/a/OAcOBuo5JNyDNFROtUA0QlAEDBycao1NTUVFRUNGfOHIdl3DjfEEky7+zrlAdvh099ul5drLZpYEbWVZyyirZh+T1qhqziEJX89cfFhrmMSpZGR+kTWK7f3W6/LlEJAFAosi4qTU5Ozpkzp6ioqLKyUlrGHS0vbDrY47hg++5I3gkcnZiBdU3rW7PK1SObS+1WMDFMti1HpdjJJV3s3t0WOvdtsF+dqAQAKDhZEZUqKyu7u7vV/37uueeKiormzp1rWSZh4da60gRt2NeZ+rqKojhkFX1QtVMG0wOVGJX8O9rk9V1FJWuXUSKtJyoBAApF5qPS7t271dtt3d3d6q23oqIiLTklH5UcnwYTRJNBKutaNmAOG/qf17U6TegUd7IA50iS4hSURCUAAKIyH5UmJyfnzp2rJiTjrTfjMsnI8qjk/Cg9UQkAgOyQ+aikKMrk5OSCBQvUtKTderMsk6iEow7SINWvCAAAmZYVUUm1YsUK460322Xcy3RIQGkpUQkAkPuyKCopimLJSbbLuKY/xxUzlWJa11UUh1tY+l84PMHm5gk4bsABADAbsisqJbeMRHuQv3R9Xav4mjf79JLKukpq8yoZJqkkKgEAkGF5/Q44PZaU+jcftHn9q6IEz+yLvgjNv/3biZlZ1/Vs3TbbtbwfjqgEAEBGZTIqpd9E2w79nWr+qi17Ws71RV7kFrrTd65lT43+NrbNRy7P2LqGsLG+7uigOQ85vgNuW5X5DbY5F5VKqxt+nHCaBwEAgJyS31FJUcI9RwzvfxVV1B+PvcuWwrrh4/V+y2KGOSotPUdOrFEnW6OSzfQKDtORAwCQM/I9KimKEr7W+mm1Q+Qpq97TZv8+3BTWNXYd2UWH4JkGKYb5N+5u3LMpx6KSMtC81ZL+zPOXAwCQmwogKimKoiihwXMt+wM1G6rKoxf0sooNNYH9LecG7YYhzcS6wTNN9TXRdfzlVR/9z1XLdvtOHNr5waaKSGTyl1fVBPZ/d3ki7BB1sjYqKUr4Wuse/WjKKjbsOSW3EACAHFEoUSm3uH5b7yxj8DYAoOAQlWaZljYc7k/p8ypl2XgfohIAoOAQlWaZPmGT7VByRVGCx+ujw5wcpqnMhJvNW4lKAIACQ1SaZeFTn0azUmSqgNuRZ+vDE7f7zrUYRpFX7GjLij6l0J07IUUJ3+rYGx3C5N/RlulGAQAwO4hKsy72WTE7/s0NnVkRlJSeg5usbbNMuAkAQP4iKmVAuKfZOtWkOYpUbWuynR88EwwvpIuGuEM9zDEJACgURKUMCU9cPnFoT6BmQ4V2w62sYkNNYM+hE5ezarbrC4drozMelFVs+mBP67Vsah0AAGlGVAIAABARlQAAAEREJQAAABFRCQAAQERUAgAAEBGVAAAAREQlAAAAEVEJAABARFQCAAAQEZUAAABERCUAAAARUQkAAEBEVAIAABARlQAAAEREJQAAABFRCQAAQERUAgAAEBGVAAAAREQlAAAAEVEJAABARFQCAAAQEZUAAABERCUAAAARUQkAAECU9qj0IwAAQJqlKcYo9CoBAAA4ICoBAACIiEoAAAAiohIAAICIqAQAACAiKgEAAIiISgAAACKiEgAAgIioBAAAICIqAQAAiIhKAAAAIqISAACAiKgEAAAgIioBAACIiEoAAAAiohIAAICIqAQAACAiKgEAAIiISgAAACKiEgAAgIioBAAAICIqAQAAiIhKAAAAIqISAACAiKgEAAAgIioBAACIiEoAAAAiohIAAICo0KPS5UPVparqQ5ftFgjf6miqr9lQUaYu5S+v2lB7+IJyvN55NScprKs3t/74DKyVoaMAACB3EJWcolK459Bmf6nV1uabRCWiEgCgMBCVHKLSQFNtTE4qLV2/uz1jIYOoBADA7CIqyVFp4mggGo8qtrdcnggriqIo4VAonGNRKR0tISoBAAoDUUmOSvrfbW2+afk7ohJRCQBQEIhKbqJSbC4hKhGVAAAFgahEVCIqAQAgKoyoFBo817Lng01V5f7S0tJSf3lVTX1Tx62wYh+V9D+zEYko1qAQ6jtxqL4msoPSsooNNfWHTvSFbFuTwrrOUSl4Zl/0gT3/xt2ngnHXmsmjMAlfO7q9IvL3FR8294RtNwEAQPbL/6gUPNNQW2YXevxVO1pv9cxAVBL3UFpWe6g7NmiksK5DVDJMbGDKSU5rzdRRWE/58XpyEgAgT+R5VDJctG1VbN26KeaKn1BU2lRXbzP1ks4fOBq0NCqFdaXQ45CTHNaamaOwRCVyEgAgr2QyKv3NneR3EGytW69d7Ku2NZy4cCekKIoSnrh+ruXTanMfSpJjlWK3Hrpz4cReQwfNOw3nZ2xd2yaFe45EV/FX7ThuzTRuolIqR2E8ccHjO6oikaus9gg5CQCQ+zIclWZkGcn5hneiGWDzwdhbSOFbrcYup+Sjkn/zoZhQEO45qHVNWacaSGHd2CYZRgXZ5ySnA5mRo9BOnGGoFDkJAJAvsjQqVVZWDg0NOS8TT+e+DWIKigi379bCUtJRqbZpwG7b+gSW63e3z9S61ibpd7vEnOR0IDNyFOqJM9wCJCcBAPJINkalpqamoqKiOXPmOCwTn54PAkcnXCyVbFSKnZ4yQo9qYkBJeF1Tk9zlJKcDmZGjqD50mZwEAMhbWReVJicn58yZU1RUVFlZKS3jij5k+WCPw2Ltu9enFJWsnS0uVk9hXf3PP/p090ZtILZ/8xGnuY3S0RLjkPDdH+o3Mit2tMnBFACAnJMVUamysrK7u1v97+eee66oqGju3LmWZRKlX+LrWp16ObTlZnwKylReUhs/Kln4tzbb3kBLW0usQ8J1Fbvb6VYCAOSNzEel3bt3q7fburu71VtvRUVFWnKagagUZ17r6CU/F6NSxfZPtZkebZ7nT2dLLFHJv3nHDm26gXf2dRKWAAB5IvNRaXJycu7cuWpCMt56My6TBKHLAxkzI98ZAABmWeajkqIok5OTCxYsUNOSduvNskyiMh0MYJXq1wUAgEzIiqikWrFihfHWm+0yCdDvHAnPwSuKoig3m7dGlsqxG3DGPx9o3hq991VRn9QUlDN1FIbZF+zmaQIAIOdkUVRSFMWSk2yXcU2fgVIcO2OcYjGHo5KiXD6iDRSyeQRt9qKSoky07dDDkuNzeQAA5ILsikrJLSMxdba03opJS8FThuftczsqGWeAjA1LsxmVTC+BIywBAHJeXr8DzthpVFpW/WnLuesTYUVRwhO3L3y3p8b8It3cjkrmg7U8rz+7Ucn07j3HSQwAAMh+mYxKs8DwJllbFfWH9ubmvEo2UyCEO/dFbzma7znOdlRSlODRQLSPy2ESAwAAsl+eRyVFUcLXWj+tto1LZbVHesK5OgWl7WxRxnfaGcLS7Ecl091PwhIAIIflf1RSFEVRQn0nDtXXbKhQI1NZxaYP9rR03QoruTtbtzCxpmFUdWn1wcgjaJmISqah5uvrWglLAIDcVCBRqbC5nrkcAABYEJUKAFEJAIBkEZUKQPvu9UQlAACSQlTKW+GJOxNhRQn1fRWIJqXNR65mulUAAOQWolK+CrfWlVq803A+060CACDHEJXyVee+DeagZPt6OAAA4IiolKfuHd8ZnRvBX15VU990hpwEAEDiiEoAAAAiohIAAICIqAQAACAiKgEAAIiISgAAACKiEgAAgIioBAAAICIqAQAAiIhKAAAAIqISAACAiKgEAAAgIioBAACIiEoAAAAiohIAAICIqAQAACAiKgEAAIiISgAAACKiEgAAgIioBAAAICIqAQAAiIhKAAAAIqISAACAiKgEAAAgIioBAACIiEoAAAAiohIAAICIqAQAACAiKgEAAIiISgAAACKiEgAAgIioBAAAICIqAQAAiIhKAAAAIqISAACAiKgEAAAgIioBAACIiEoAAAAiohIAAICIqAQAACAiKgEAAIj0qDQBAAAAMz0qTT0JUhRFURRFUcYiKlEURVEURYlFVKIoiqIoihKLqERRFEVRFCUWUYmiKIqiKEosohJFURRFUZRYRCWKoiiKoiixiEoURVEURVFiEZUoiqIoiqLEIipRFEVRFEWJRVSiKIqiMlPByYGhny73D5/vvdHZ3fsDRWnV03+m90bnwO2LA7cvBicHMvtFJSpRFEVRs1q/PLg1cPvij5dOnT7XSlEuq3/4/C8PbmXkG0tUoiiKomap7j8a7R8+39H1/elzrT/8eLzryulL18/2D5+/fqv72q3u67cuUJSx+ofPXx3sunzt7MX+f6lfm4wEJqISRVEUNRt1NzR09sL/nj7X2nnpZE//GbIRlWj13fixo+v7jq7vZ/mWHFGJoiiKSnuNjl/r6Pr+hx+PE5KoFKun/0xH1/dDP12etW8vUYmiKIpKb6k56Uz3/14nJFEzUrcvnun+31t3+mbnC0xUoiiKotJYd0NDak6iM4mawbox0nPuYtvs3IkjKlEURVFprO7eH85eaCMnUTNeN0Z6OntOzsJ3mKhEURRFpatu3en74cfjfUM/ZvyySuVn3b54Y+Riur/GRCWKoigqLXX/0eiPl05dun428xdUKn/r6mBXuqcPmKWoNHGloXbtK8uX+nw+3wsrXq/a+1Xfr07Ln935ms/n29Ci/clgZ1PdkUuZ/39+vHa6qF9/OLL59RUv+Hw+39IXN379JDgx+NXHB77K+LFQFEXNbI2OXzt7oe3GSE9iF7/j77/qM1j/if5X+9f5fK9sPZ7WS+8nZYadl+3PfBSIPTluWrVnfXKN/6TMcs4j1bR1leHP96+zWyZjNfzzlbR+k2cjKk38GHh9qc9ixbsHBuRVLBHk683LfL7XPu7O/P/zndvppk7V/ad+FlZv67j08RtLfb53D2T8WCiKoma2evrPXL6WWJfSnvWWgKIGl3V7tCt0WqOSmtKMgcDne/WjpoxHAUsL42cg14kqpqSoZCxzbMqCujp8Pq3f5FmISmc+W/u8z+fzLf1r3dnBqV+7jrz7J5/P5/Mt39Di9jG/pnd9eROVmt71+XzLK5u6JtQ/6Q6s9hGVKIrKw+rsOZnQaO5/fvSKXRIyXLzTHJX++dEreiy7deG6Gt1Wvf/PTEcBvYhKQk38msZ7cOmPSn0fv+Hz+Xy+pe8eiISDGztK1D+p+PyWu43kXVQyHAtRiaKoPK3zve0zcpHes/+T68eb/nkrJiqZbtWZIo7lLp7eM7R/nc+3butHr7i8v7ZnfcyWLQ2227vaN2bddSS+GNZa/0kkdqiimSyS2Pavs7kPaM1AxjZEz4xhRT3nuTtXr370frwbcHZ7tP9D4UBMu2sybd90ZhKLSiPjV9P3TU57VLp1OHKOXt/VHv3DE3WrfT6fz/enTd8KaxkiyIENPqPKpugyE4Nf7XpHG/Tzyv/7YF/nPZstDLQFyl9dvtTnW/riX6ubf5h4Epy6d2zfO39dvtTn8y1b8ca7R67oUdS4Td8Lf3ptbbXxbx3bGa17pw998OZfXnxe3cLf3vn4u8HoFloqTYfie23Du68Z//fqnW2z/1tGURSVpkrs7tvx91+Ne7fLGJXMd8dMmcaSJ/av09OGetl221HUtHWVsLD5Vp1h7+ol39SSyGKRiGANNNF26knxn5EkZ7ztGF3MeGjmNpj65OzOgP25Mv1VNK/EGatk7lWSmxE5kOgJjCbI2OOynOdPyhK/73ljpCd93+S0RyU1TJjzRNvH/6X+2Zuf3XBayyEq2Y5/Wrom0PGraQuVn1gW+9Pm1mMfr3netNqKTd+qa905vHGFdZu+pW9+1hfn6PRDu31gQ+wWVlQ23Q5OPSEqURRVWHV1sCuBq50xEMSPSrEhRo8aMXfNDJd2N3uJlnqlt104ZheflKlLxtwi1KODNQtae9G0bcbeiNR3Z8hAMT1ehnNiikoO58rpNLqMSg7NsB6I9eRrkSiZbGSpoZ8upe+bnPao9NV7z8tRSbynZokgMTfg1C38qXRn04WxW1NPgndGjx9675WlPt8rda3GLfh8y96oa7p0Lzj169W2T/661OdbuvT5pauqDp2/OvEkeOfirvIVPp/v+Y3/DE5FO8BerNqjbnPq3tmjH73mnGDM7exrene5z/f8q+/tax8dnHoSnBj719GdJSvMtxq5AUdRVIFU//D5dEUluy4om3FFxltRiY52Ute1vxMkDtaJHe2kpxbbe2diVDJtxJK3yvbbZxp9xZjOJ+FcxWYU6dCkqOTUDOuBiFEppsMpibqdxtmV0h6Vmt71zXxUaq/9D5/vPz76esK01pldb+o39SJR6e1d+nN2vzZU+nw+338GzuhrdXzyqs/n8x/um3oS7N33ps/ne7F8pxp03JSpnXf2+C17fBKcenLrm5rlxv4zohJFUQVSiU0TkNANOMuEAhpDn4rq1Y+aYnqVXEQlp5xknw/0CDIjUckm89lFJRv2Ucn+XEkpKtGoJDTDfVTSz7nxKBKs9H2Tc7JXSc00gr/uuKRvwdwhpN7L00c7WRfr21ESvVu39MWVf3sncPj0v267n//p+KYXxVZFOq5ij4WoRFFUvtaN0YRmVHLuqnll63HbxCBsx+kGXJyoFBlh4zSyWIxKs9yrJCbLmKgknKuZ6VWSmpFYVDI3PtG0NDiayzfgUh6rFJyKiRfaNu1EFksmKj0JDrQFyl9ZZtreC2sCbeJgMVM7rUORTMQeMqISRVF5Wv3Dib33zWmyADX6WMYqma7o5ke0jH9lHHccLyqpOSnuuBlxOFTMbUS7lOMmKrkbq2TufLJdzPFczdBYJaEZSUYl8ZvgVLk9VsnuCbijH77s8/lcPgEXnIqJF127/urz+Ur2/eiw3+Siklp3+o82793632tfjTwK96d3vxH6lkzt/GfVUp/vxS3/43xCiEoURRVI9d9M+BW5whSUxqfG7J+AM1xczc+gWZ7qco5K7uecFB/7ivMEnOuoZJk7IP4TcOYgYnNvy+5cWe97RsYMxZut2xSP5Ga4jkqWUyE/eCjX7bFcniwgEgUSnFcpzlgl9VbXmx9flPebSlTS69f2HW/63N4oVI9LzlX2x0JUoigqT+v22NVEo5J2QdU5vNhEnCvINElP2X7DECKnqGSe2kcnLe9qXqU4UyLJN+C0yZ9iDznOvEqmNphDm11rTX+1/n0XN+CEmQ5impFIr5J5zFPi036OT91M3zd5Nmbr3qWOLIrO1t1So77ZY3l1qzhlkV1Uer6yWRtt3Rr4i8/ne/7PVbsiQ7DvXW5vqnp1qf7kfxJR6UTgzz7f868HIk/VTT0ZvHSs9vWlPt/SyiY3vUpP+g5WPO/z+V5484OjfVcnngSnfr164VigdIVpxgH7qPRf2zocAxZFUVTO1eTDkWSiUsGXzYAnKl7dfzSavm9ybrwDTn1Ozefz+ZaW7LshbtO3dOXGlh7jFhLrVbr9efkLMdv0Pf/6LpeTBQjzKvmWvbHrhPawnjUqRZ7L8/l8vhUf8NJciqLyqgZHL2f8IppzRVRKtNJ6921qdqLS1JPgxOBXH1e8snypz+fzvbDi9aq9X/W5f7LsSXDq9pe1a5Yv9fl8S1d9/GN0m1eOfGyeWfvQxUHLFhK9AafO1v1nda5t37IVb1R8/O0PE+7b+SQ4dfvYPm227qXL//xGxa4TXcYtxMwRdatj39v/+YLP5/O98M6Bn9L/y0VRFDVrdf/RaMavozlXRKVE65d0vgBuataiEkVRFFWYdSu5EUsU5a7S3aU0RVSiKIqi0lr/fvxzYnNRUpTrGhy99O/HP6f7O0xUoiiKotJb3Iaj0lE3RnrSfetNLaISRVEUlfb65ddbGb+yUvlUN0Z67v57aHa+vUQliqIoajZq8uHtwdFLGb/EUnlQg6OX0jqRkqWIShRFUdQs1b8f/zwy3p/xCy2V03XzTm9aZ1GKLaISRVEUNas1+fA2gYlKtG6M9Ny80zv58Pbsf2OJShRFUVRm6u6/h0bG+2/e6eXGHBVbN0Z6boz0DP985fbY1bv/HpqFJ92k6u/vHxgYICpRFEVRFEXZFFGJoiiKoihKLKISRVEURVGUWGpUGh4eJipRFEVRFEVZi6hEURRFURQlFlGJoiiKoijKvn59Mt7f33/jxg2iEkVRFEVRlLV+fTxx7dq1wcHBmzdv/n+sMD9sgA/w7QAAAABJRU5ErkJggg==" alt="" />
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="utf-8">
- <title>Backbone.js Todos</title>
- <link rel="stylesheet" href="todos.css"/>
- </head>
- <body>
- <div id="todoapp">
- <header>
- <h1>Todos</h1>
- <input id="new-todo" type="text" placeholder="What needs to be done?">
- </header>
- <section id="main">
- <input id="toggle-all" type="checkbox">
- <label for="toggle-all">Mark all as complete</label>
- <ul id="todo-list"></ul>
- </section>
- <footer>
- <a id="clear-completed">Clear completed</a>
- <div id="todo-count"></div>
- </footer>
- </div>
- <div id="instructions">
- Double-click to edit a todo.
- </div>
- <div id="credits">
- Created by
- <br />
- <a href="http://jgn.me/">Jérôme Gravel-Niquet</a>.
- <br />Rewritten by: <a href="https://github.com/tastejs/todomvc">TodoMVC</a>.
- </div>
- <script src="../../test/vendor/json2.js"></script>
- <script src="../../test/vendor/jquery.js"></script>
- <script src="../../test/vendor/underscore.js"></script>
- <script src="../../backbone.js"></script>
- <script src="../backbone.localStorage.js"></script>
- <script src="todos.js"></script>
- <!-- Templates -->
- <script type="text/template" id="item-template">
- <div class="view">
- <input class="toggle" type="checkbox" <%= done ? 'checked="checked"' : '' %> />
- <label><%- title %></label>
- <a class="destroy"></a>
- </div>
- <input class="edit" type="text" value="<%- title %>" />
- </script>
- <script type="text/template" id="stats-template">
- <% if (done) { %>
- <a id="clear-completed">Clear <%= done %> completed <%= done == 1 ? 'item' : 'items' %></a>
- <% } %>
- <div class="todo-count"><b><%= remaining %></b> <%= remaining == 1 ? 'item' : 'items' %> left</div>
- </script>
- </body>
- </html>
- // An example Backbone application contributed by
- // [Jérôme Gravel-Niquet](http://jgn.me/). This demo uses a simple
- // [LocalStorage adapter](backbone.localStorage.html)
- // to persist Backbone models within your browser.
- // Load the application once the DOM is ready, using `jQuery.ready`:
- $(function(){
- // Todo Model
- // ----------
- // Our basic **Todo** model has `title`, `order`, and `done` attributes.
- var Todo = Backbone.Model.extend({
- // Default attributes for the todo item.
- defaults: function() {
- return {
- title: "empty todo...",
- order: Todos.nextOrder(),
- done: false
- };
- },
- // Toggle the `done` state of this todo item.
- toggle: function() {
- this.save({done: !this.get("done")});
- }
- });
- // Todo Collection
- // ---------------
- // The collection of todos is backed by *localStorage* instead of a remote
- // server.
- var TodoList = Backbone.Collection.extend({
- // Reference to this collection's model.
- model: Todo,
- // Save all of the todo items under the `"todos-backbone"` namespace.
- localStorage: new Backbone.LocalStorage("todos-backbone"),
- // Filter down the list of all todo items that are finished.
- done: function() {
- return this.where({done: true});
- },
- // Filter down the list to only todo items that are still not finished.
- remaining: function() {
- return this.where({done: false});
- },
- // We keep the Todos in sequential order, despite being saved by unordered
- // GUID in the database. This generates the next order number for new items.
- nextOrder: function() {
- if (!this.length) return 1;
- return this.last().get('order') + 1;
- },
- // Todos are sorted by their original insertion order.
- comparator: 'order'
- });
- // Create our global collection of **Todos**.
- var Todos = new TodoList;
- // Todo Item View
- // --------------
- // The DOM element for a todo item...
- var TodoView = Backbone.View.extend({
- //... is a list tag.
- tagName: "li",
- // Cache the template function for a single item.
- template: _.template($('#item-template').html()),
- // The DOM events specific to an item.
- events: {
- "click .toggle" : "toggleDone",
- "dblclick .view" : "edit",
- "click a.destroy" : "clear",
- "keypress .edit" : "updateOnEnter",
- "blur .edit" : "close"
- },
- // The TodoView listens for changes to its model, re-rendering. Since there's
- // a one-to-one correspondence between a **Todo** and a **TodoView** in this
- // app, we set a direct reference on the model for convenience.
- initialize: function() {
- this.listenTo(this.model, 'change', this.render);
- this.listenTo(this.model, 'destroy', this.remove);
- },
- // Re-render the titles of the todo item.
- render: function() {
- this.$el.html(this.template(this.model.toJSON()));
- this.$el.toggleClass('done', this.model.get('done'));
- this.input = this.$('.edit');
- return this;
- },
- // Toggle the `"done"` state of the model.
- toggleDone: function() {
- this.model.toggle();
- },
- // Switch this view into `"editing"` mode, displaying the input field.
- edit: function() {
- this.$el.addClass("editing");
- this.input.focus();
- },
- // Close the `"editing"` mode, saving changes to the todo.
- close: function() {
- var value = this.input.val();
- if (!value) {
- this.clear();
- } else {
- this.model.save({title: value});
- this.$el.removeClass("editing");
- }
- },
- // If you hit `enter`, we're through editing the item.
- updateOnEnter: function(e) {
- if (e.keyCode == 13) this.close();
- },
- // Remove the item, destroy the model.
- clear: function() {
- this.model.destroy();
- }
- });
- // The Application
- // ---------------
- // Our overall **AppView** is the top-level piece of UI.
- var AppView = Backbone.View.extend({
- // Instead of generating a new element, bind to the existing skeleton of
- // the App already present in the HTML.
- el: $("#todoapp"),
- // Our template for the line of statistics at the bottom of the app.
- statsTemplate: _.template($('#stats-template').html()),
- // Delegated events for creating new items, and clearing completed ones.
- events: {
- "keypress #new-todo": "createOnEnter",
- "click #clear-completed": "clearCompleted",
- "click #toggle-all": "toggleAllComplete"
- },
- // At initialization we bind to the relevant events on the `Todos`
- // collection, when items are added or changed. Kick things off by
- // loading any preexisting todos that might be saved in *localStorage*.
- initialize: function() {
- this.input = this.$("#new-todo");
- this.allCheckbox = this.$("#toggle-all")[0];
- this.listenTo(Todos, 'add', this.addOne);
- this.listenTo(Todos, 'reset', this.addAll);
- this.listenTo(Todos, 'all', this.render);
- this.footer = this.$('footer');
- this.main = $('#main');
- Todos.fetch();
- },
- // Re-rendering the App just means refreshing the statistics -- the rest
- // of the app doesn't change.
- render: function() {
- var done = Todos.done().length;
- var remaining = Todos.remaining().length;
- if (Todos.length) {
- this.main.show();
- this.footer.show();
- this.footer.html(this.statsTemplate({done: done, remaining: remaining}));
- } else {
- this.main.hide();
- this.footer.hide();
- }
- this.allCheckbox.checked = !remaining;
- },
- // Add a single todo item to the list by creating a view for it, and
- // appending its element to the `<ul>`.
- addOne: function(todo) {
- var view = new TodoView({model: todo});
- this.$("#todo-list").append(view.render().el);
- },
- // Add all items in the **Todos** collection at once.
- addAll: function() {
- Todos.each(this.addOne, this);
- },
- // If you hit return in the main input field, create new **Todo** model,
- // persisting it to *localStorage*.
- createOnEnter: function(e) {
- if (e.keyCode != 13) return;
- if (!this.input.val()) return;
- Todos.create({title: this.input.val()});
- this.input.val('');
- },
- // Clear all done todo items, destroying their models.
- clearCompleted: function() {
- _.invoke(Todos.done(), 'destroy');
- return false;
- },
- toggleAllComplete: function () {
- var done = this.allCheckbox.checked;
- Todos.each(function (todo) { todo.save({'done': done}); });
- }
- });
- // Finally, we kick things off by creating the **App**.
- var App = new AppView;
- });
Backbone 如何实现双向数据绑定?
http://codedocker.com/backbone-events-introduce/
model to view
- var View = Backbone.View.extend({
- initialize:function(){
- this.listenTo(this.model,'change:name',this.onNameChange);
- },
- onNameChange:function(){
- this.$('.name').text(this.model.get('name'));
- }
- template: '<span class="name"></span>'
- });
- var m = new Backbone.Model({name:'Jack'});
- var v = new View({model:m});
- m.set('name','John');
view to model
- var View = Backbone.View.extend({
- initialize:function(){
- this.listenTo(this.model,'change:name',this.onNameChange);
- },
- onNameChange:function(){
- this.$('.name').text(this.model.get('name'));
- }
- template: '<input type="text" class="name-input"><span class="name"></span>',
- events: {'input .name-input': '_changeName'},
- _changeName: function(e){
- var value = e.currentTarget.value;
- this.model.set('name', value);
- return false;
- }
- });
- var m = new Backbone.Model({name:'Jack'});
- var v = new View({model:m});
- m.set('name','John');
MVVM与Backbone demo的更多相关文章
- 使用Prism提供的类实现WPF MVVM点餐Demo
使用Prism提供的类实现WPF MVVM点餐Demo 由于公司开发的技术需求,近期在学习MVVM模式开发WPF应用程序.进过一段时间的学习,感受到:学习MVVM模式,最好的方法就是用MVVM做几个D ...
- (五)backbone - DEMO - 通信录改造之使用requirejs
DEMO介绍是 DEMO通信录的扩展,使用requirejs模块化整合 大体实现 • model文件 model/contact.js define(function (){ // user cont ...
- (四)backbone - DEMO - 通信录
DEMO介绍 是DEMO - User List 的扩展,增加查询 大体实现 •创建Contact Model var Contact = Backbone.Model.extend({ defaul ...
- (二)backbone - DEMO - user list
Demo介绍 学习了如何基本的使用Backbone,展示用户信息 使用JQuery操作DOM,backbone.localStorage.js操作localstorage 大体实现 •创建user M ...
- Xamarin.Android和UWP之MVVM的简单使用(二)
0x01 前言 前面一篇,Xamarin.Android和UWP之MVVM的简单使用(一),主要讲了MvvmLight的简单使用 这篇主要讲讲MvvmCross的简单使用,例子的话,还是和上篇的一样. ...
- Xamarin.Android和UWP之MVVM的简单使用(一)
0x01 前言 就目前而言,MVVM可以说是挺流行的,无论是web端还是移动端,web端的主要代表angularjs,avalonjs等, 移动端(xamarin,uwp)的代表应该是mvvmligh ...
- 最轻量级的前端Mvc框架backbone
最轻量级的前端Mvc框架backbone依赖最轻量级的库understore backbone并非将前端再次切分为mvc,而是分为了七大模块,分别是:Events.Model.Collection.R ...
- 使用backbone.js、zepto.js和trigger.io开发HTML5 App
为了力求运行速度快.响应迅即,我们推荐使用backbone.js和zepto.js. 为了让这个过程更有意思,我们开发了一个小小的示例项目,使用CSS重置样式.Backbone.js和带转场效果的几个 ...
- devexpress WinForms MVVM
WinForms MVVM This section is dedicated to the Model-View-ViewModel (MVVM) architectural pattern. Yo ...
随机推荐
- 数据库错误:check the manual that corresponds to your MySQL server version for the right sy
检查对应到您的MySQL服务器版本附近使用正确的语法手册 数据库插入的时候出现上述问题,总结了两方面原因: 1.语法错误,这是百度之得到的大部分结果,但是没有解决我的问题 2.仔细观察我的sql语句, ...
- HDU 2069 Coin Change(完全背包变种)
题意:给你5种银币,50 25 10 5 1,问你可以拼成x的所有可能情况个数,注意总个数不超过100个 组合数问题,一看就是完全背包问题,关键就是总数不超过100个.所有我们开二维dp[k][j], ...
- AlertDialog对话框简单案例
什么是Dialog? Dialog类,是一切对话框的基类,需要注意的是,Dialog类虽然可以在界面上显示,但是并非继承于View类,而是直接从java.lang.Object开始构造出的.类似于Ac ...
- 数据类型和Json格式
1. 前几天,我才知道有一种简化的数据交换格式,叫做yaml. 我翻了一遍它的文档,看懂的地方不多,但是有一句话令我茅塞顿开. 它说,从结构上看,所有的数据(data)最终都可以分解成三种类型: 第一 ...
- acm数学(待续)
意图写出http://www.cnblogs.com/kuangbin/archive/2012/08/28/2661066.html这个东西的完善版. 1.置换,置换的运算 poj 2369 Per ...
- EF中执行sql语句,以及事务
EF to sql string sql = "select T_Task.BSID,T_Task.CloseDate,T_Task.CompleteDate,T_Task.CloseUse ...
- html 之input标签height设置问题
今天针对这个问题纠结了很久 <input type="button" value="xx" style="height:99px;" ...
- 怎样去除织梦版权信息中的Power by DedeCms
用织梦建站时,网站底部调用的版权信息最后总会多出一个Power by DedeCms链接,此链接是织梦系统中默认的指向织梦官网的外链.本文就介绍两种去除这个外链的方法. 1.为什么要去除Power b ...
- ejabberd 在eclipse(erlide)中的配置、调试、运行
最近在折腾ejabberd,将ejabberd项目配置到eclipse中进行编译.调试等,现在将过程记下来,希望能帮助到需要的人. 准备 本次环境是在linux中进行,博主的linux是fedora2 ...
- js获取浏览器前缀
<script> var div = null; var _prefix = (function (temp) { var prefix = ["webkit", &q ...