Objective c 使用带有MVVM模式的RAC命令,将参数发送到ViewModel
我在我的应用程序中使用了ReactiveCocoa框架,用于使用MVVM设计模式的power 因此,对于每个控制器,我都有一个ViewModel。控制器绑定到他的ViewModel UIButton绑定看起来是这样的:Objective c 使用带有MVVM模式的RAC命令,将参数发送到ViewModel,objective-c,mvvm,reactive-cocoa,raccommand,Objective C,Mvvm,Reactive Cocoa,Raccommand,我在我的应用程序中使用了ReactiveCocoa框架,用于使用MVVM设计模式的power 因此,对于每个控制器,我都有一个ViewModel。控制器绑定到他的ViewModel UIButton绑定看起来是这样的: @implementation HomeController -(void) bindViewModel { self.viewHeader.buttonSide.rac_command = self.viewModel.execiteFullPortfolio; } 这一
@implementation HomeController
-(void) bindViewModel {
self.viewHeader.buttonSide.rac_command = self.viewModel.execiteFullPortfolio;
}
这一切都很好,但当我想将参数传递给ViewModel时,我不确定什么是正确的方法
假设我有一个股票的UICollectionView,每次点击一个特定的股票,我都想导航到股票简介页面。
这种逻辑应该在ViewModel中完成,但是如何使用rac命令传递股票呢
我目前正在做的是:
@implementation HomeController
-(void) bindViewModel {
__unsafe_unretained HomeController *weakSelf = self;
self.viewPortfolioPusherView.scrollGainView.blockSelect = ^ (STStock *stock){
weakSelf.viewModel.selectedStock = stock;
[weakSelf.viewModel.executeGoToStock execute:[RACSignal empty]];
};
}
@implementation HomeViewModel
-(void) initialization {
self.executeGoToStock = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input) {
dispatch_async(dispatch_get_main_queue(), ^{
[weakSelf moveToSelectedStock];
});
return [RACSignal empty];
}];
}
-(void) moveToSelectedStock {
[self stockProfileControllerLazy];
self.stockProfileController.stock = self.selectedStock;
[Navigator pushController:self.stockProfileController fromController:[self.delegate controller]];
}
我相信这不是最好的做法!所以我在问,什么是
谢谢。为什么不将
STStock
实例传递到对命令的execute
调用中,而不是传递一个空信号
[weakSelf.viewModel.executeGoToStock execute:stock];
然后:
显然,您需要修改moveToSelectedStock
以获取参数。然而,我会更进一步,在您的导航器上实现一个RACCommand
,这样做。此外,我将为STStock
的实例而不是集合创建一个单独的视图模型。因此,当你选择一只股票时,它可能看起来更像这样:
StockViewModel *viewModel = [[StockViewModel alloc] initWithStock:stock];
[[Navigator pushViewModel] execute:viewModel];
这显然忽略了一些细节。例如,我的导航器将视图模型类映射到控制器类。推送视图模型时,它会创建相应的控制器,并将视图模型绑定到该控制器。为什么不将STStock
实例传递到命令上的execute
调用中,而不是传递一个空信号
[weakSelf.viewModel.executeGoToStock execute:stock];
然后:
显然,您需要修改moveToSelectedStock
以获取参数。然而,我会更进一步,在您的导航器上实现一个RACCommand
,这样做。此外,我将为STStock
的实例而不是集合创建一个单独的视图模型。因此,当你选择一只股票时,它可能看起来更像这样:
StockViewModel *viewModel = [[StockViewModel alloc] initWithStock:stock];
[[Navigator pushViewModel] execute:viewModel];
这显然忽略了一些细节。例如,我的导航器将视图模型类映射到控制器类。推送视图模型时,它会创建相应的控制器,并将视图模型绑定到该控制器。为什么不将STStock
实例传递到命令上的execute
调用中,而不是传递一个空信号
[weakSelf.viewModel.executeGoToStock execute:stock];
然后:
显然,您需要修改moveToSelectedStock
以获取参数。然而,我会更进一步,在您的导航器上实现一个RACCommand
,这样做。此外,我将为STStock
的实例而不是集合创建一个单独的视图模型。因此,当你选择一只股票时,它可能看起来更像这样:
StockViewModel *viewModel = [[StockViewModel alloc] initWithStock:stock];
[[Navigator pushViewModel] execute:viewModel];
这显然忽略了一些细节。例如,我的导航器将视图模型类映射到控制器类。推送视图模型时,它会创建相应的控制器,并将视图模型绑定到该控制器。为什么不将STStock
实例传递到命令上的execute
调用中,而不是传递一个空信号
[weakSelf.viewModel.executeGoToStock execute:stock];
然后:
显然,您需要修改moveToSelectedStock
以获取参数。然而,我会更进一步,在您的导航器上实现一个RACCommand
,这样做。此外,我将为STStock
的实例而不是集合创建一个单独的视图模型。因此,当你选择一只股票时,它可能看起来更像这样:
StockViewModel *viewModel = [[StockViewModel alloc] initWithStock:stock];
[[Navigator pushViewModel] execute:viewModel];
这显然忽略了一些细节。例如,我的导航器将视图模型类映射到控制器类。推送视图模型时,它将创建相应的控制器,并将视图模型绑定到该控制器