当前位置:网站首页>Structure of ViewModel
Structure of ViewModel
2022-07-05 02:24:00 【hxa12345】
1、ViewModel:
abstract class , There are mainly clear Method , It is final level , Do not modify the ,clear Method contains onClear hook , Developers can rewrite onClear Method to define the emptying of data
2、ViewModelStore:
Internal maintenance one HashMap To manage ViewModel
3、ViewModelStoreOwner:
Interface ,ViewModelStore Scope of action , The implementation class for ComponentActivity and Fragment, Besides, there are FragmentActivity.HostCallbacks
4、ViewModelProvider:
Used to create ViewModel, The construction methods are Two parameters :
The first parameter is passed in ViewModelStoreOwner , To determine the ViewModelStore Scope of action ;
The second parameter is ViewModelProvider.Factory, For initialization ViewModel object , The default is getDefaultViewModelProviderFactory() Method acquired factory.
5、 Several ways to implement two-way binding
At present, several mainstream mvc(vm) The framework implements one-way data binding , And the two-way data binding that I understand is nothing more than to give input elements on the basis of one-way binding (input、textare etc. ) Added change(input) event , To dynamically modify model and view, Not so deep . So there's no need to worry too much about one-way or two-way binding of implementation .
There are several ways to implement data binding :
Publisher - Subscriber pattern (backbone.js)Dirty value check (angular.js)
The data was hijacked (vue.js)
Publisher - Subscriber pattern : Usually by sub, pub Data and view binding monitoring , The usual way to update data is vm.set('property', value), Not familiar. Ask Du Niang
This way, after all, is too low 了 , We prefer to pass vm.property = value Update data this way , Automatically update the view at the same time , So there are two ways
Dirty value check : angular.js It is to compare whether there is any change in data through dirty value detection , To decide whether to update the view , The easiest way is through setInterval() Regular polling detects data changes , Of course Google Not so low,angular Enter dirty value detection only when the specified event is triggered , As follows :
- DOM event , For example, users input text , Click button, etc .( ng-click )
- XHR Responding to events ( $http )
- browser Location Change event ( $location )
- Timer event ( $timeout , $interval )
- perform $digest() or $apply()
The data was hijacked : vue.js Data hijacking combined with publishers - How subscriber mode works , adopt Object.defineProperty() To hijack the setter,getter, Publish messages to subscribers when data changes , Trigger corresponding listening callback .
Train of thought
I have learned that vue Data binding is done through data hijacking , The most important way is through Object.defineProperty() To achieve the hijacking of properties , To monitor data changes , No doubt this method is the most important in this article 、 One of the most basic elements , If you're not familiar with defineProperty, stab here Sort it out , To achieve mvvm Two-way binding of , We must realize the following points :
- Implement a data listener Observer, The ability to listen for all attributes of a data object , Updated values are available and subscribers are notified of any changes
- Implement an instruction parser Compile, Scan and parse the instructions of each element node , Replace the data according to the instruction template , And bind the corresponding update function
- Achieve one Watcher, As the connection Observer and Compile The bridge , The ability to subscribe and receive notification of each property change , Executes the corresponding callback function for the instruction binding , To update the view
- mvvm Entry function , Integrate the above three
边栏推荐
- Pytorch common code snippet collection
- Collection of gmat750 wrong questions
- Tla+ through examples (XI) -- propositional logic and examples
- 如何搭建一支搞垮公司的技術團隊?
- [uc/os-iii] chapter 1.2.3.4 understanding RTOS
- 179. Maximum number - sort
- Exploration of short text analysis in the field of medical and health (II)
- How to find hot projects in 2022? Dena community project progress follow-up, there is always a dish for you (1)
- Variables in postman
- openresty ngx_lua变量操作
猜你喜欢

Restful Fast Request 2022.2.1发布,支持cURL导入

Pytest (5) - assertion
![[technology development-26]: data security of new information and communication networks](/img/13/10c8bd340017c6516edef41cd3bf6f.png)
[technology development-26]: data security of new information and communication networks

Tucson will lose more than $400million in the next year

Summary and practice of knowledge map construction technology

Codeforces Global Round 19 ABC

JVM's responsibility - load and run bytecode

A tab Sina navigation bar

. Net starts again happy 20th birthday

Binary tree traversal - middle order traversal (golang)
随机推荐
RichView TRVStyle MainRVStyle
February database ranking: how long can Oracle remain the first?
Pytest (5) - assertion
Pytorch common code snippet collection
Talk about the things that must be paid attention to when interviewing programmers
低度酒赛道进入洗牌期,新品牌如何破局三大难题?
Go RPC call
Runc hang causes the kubernetes node notready
问题解决:AttributeError: ‘NoneType‘ object has no attribute ‘append‘
Serious bugs with lifted/nullable conversions from int, allowing conversion from decimal
Redis distributed lock, lock code logic
Naacl 2021 | contrastive learning sweeping text clustering task
ICSI 311 Parser
Pgadmin 4 V6.5 release, PostgreSQL open source graphical management tool
Write a thread pool by hand, and take you to learn the implementation principle of ThreadPoolExecutor thread pool
Hmi-30- [motion mode] the module on the right side of the instrument starts to write
openresty ngx_ Lua variable operation
Medusa installation and simple use
Security level
Practical case of SQL optimization: speed up your database