当前位置:网站首页>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
边栏推荐
- Erreur de type de datagramme MySQL en utilisant Druid
- Design and practice of kubernetes cluster and application monitoring scheme
- Application and development trend of image recognition technology
- 172. Zero after factorial
- Codeforces Round #770 (Div. 2) ABC
- Marubeni Baidu applet detailed configuration tutorial, approved.
- Application and Optimization Practice of redis in vivo push platform
- Use the difference between "Chmod a + X" and "Chmod 755" [closed] - difference between using "Chmod a + X" and "Chmod 755" [closed]
- From task Run get return value - getting return value from task Run
- Write a thread pool by hand, and take you to learn the implementation principle of ThreadPoolExecutor thread pool
猜你喜欢
Hmi-32- [motion mode] add light panel and basic information column
runc hang 导致 Kubernetes 节点 NotReady
spoon插入更新oracle数据库,插了一部分提示报错Assertion botch: negative time
openresty ngx_lua执行阶段
Yolov5 model training and detection
官宣!第三届云原生编程挑战赛正式启动!
Runc hang causes the kubernetes node notready
A tab Sina navigation bar
Introduce reflow & repaint, and how to optimize it?
[Digital IC hand tearing code] Verilog edge detection circuit (rising edge, falling edge, double edge) | topic | principle | design | simulation
随机推荐
Application and Optimization Practice of redis in vivo push platform
Collection of gmat750 wrong questions
187. Repeated DNA sequence - with unordered_ Map basic content
Introduce reflow & repaint, and how to optimize it?
spoon插入更新oracle数据库,插了一部分提示报错Assertion botch: negative time
Open source SPL optimized report application coping endlessly
低度酒赛道进入洗牌期,新品牌如何破局三大难题?
[download white paper] does your customer relationship management (CRM) really "manage" customers?
One plus six brushes into Kali nethunter
Educational Codeforces Round 122 (Rated for Div. 2) ABC
如何搭建一支搞垮公司的技術團隊?
官宣!第三届云原生编程挑战赛正式启动!
Openresty ngx Lua Execution stage
85.4% mIOU! NVIDIA: using multi-scale attention for semantic segmentation, the code is open source!
问题解决:AttributeError: ‘NoneType‘ object has no attribute ‘append‘
Binary tree traversal - middle order traversal (golang)
Application and Optimization Practice of redis in vivo push platform
Matrixone 0.2.0 is released, and the fastest SQL computing engine is coming
Erreur de type de datagramme MySQL en utilisant Druid
Medusa installation and simple use