Skip to content

装配ViewModel

xuwhale6 edited this page Aug 26, 2020 · 17 revisions

我们提供自动装配和手动装配来简化ViewModel数据源的赋值。

一、自动装配

一般情况下,我们ViewModel的数据源来自网络请求,因此提供自动装配,可将网络请求返回的json串自动解析作为ViewModel的默认数据。

用法:

二、手动装配

编写demo.ag代码时,我们通常在preview中初始化数据源。打包之后将preview的数据源作为ViewModel的默认数据,即为手动装配。

用法:打包之后生成的ViewModel提供defaultUserData方法将preview的数据源作为ViewModel的默认数据。

  • iOS手动装配

在ViewController.m中添加如下代码:

#import <MLNUIKit.h>
#import "ViewController.h"
#import "MovieData.h"

@interface ViewController ()

@property() MovieData *model;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // 1. 创建一个MLNUIViewController示例
    MLNUIViewController *viewController = [[MLNUIViewController alloc] initWithEntryFileName:@"chat_demo/VChatMovieList.lua" bundleName:@"MLNUIDemoTestMUI"];

   //手动装配:ViewModel调用`defaultUserData`方法将`preview`的数据源作为`ViewModel`的默认数据。
    self.model = [MovieData defaultUserData];
    [viewController bindData:self.model forKey:@"MovieData"];
    
    // 3.添加到指定的控制器上.
    [viewController mlnui_addToSuperViewController:self frame:self.view.bounds];

}
  • Android手动装配

在Activity、Fragment或任意view中显示LuaView及Databingding使用

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //声明对象
        argo = new Argo(this);
        //是否打开debug按钮
        argo.showDebugButton(true);
        //加载lua文件
        argo.loadAssetsUI("VChatMovieList.lua");
        //ViewModel绑定,提供defaultUserData方法,将argo源文件中的preview数据作为初始数据,即手动装配
        MovieDataViewModel viewModel = MovieDataViewModel.defaultUserData();
        argo.bind(viewModel); 
    }

    @Override
    protected void onPause() {
        super.onPause();
        argo.onPause(); 
    }

    @Override
    protected void onResume() {
        super.onResume();
        argo.onResume(); 
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        argo.onDestroy(); 
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (argo.onActivityResult(requestCode, resultCode, data))
            return;
        super.onActivityResult(requestCode, resultCode, data);
    }
Clone this wiki locally