首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何编写泛型ViewModel和ViewController类。我正在尝试从ViewModel访问变量,但没有成功?

泛型ViewModel和ViewController类的编写可以根据具体的编程语言和框架来实现,下面我以JavaScript和React为例来说明。

在JavaScript中,你可以使用泛型来定义ViewModel和ViewController类。泛型允许我们在声明类时不指定具体的类型,而是在实例化类时再指定类型。这样可以提高代码的灵活性和复用性。

首先,我们定义一个泛型ViewModel类,示例代码如下:

代码语言:txt
复制
class ViewModel<T> {
  private data: T;

  constructor(data: T) {
    this.data = data;
  }

  getData(): T {
    return this.data;
  }
}

在这个例子中,ViewModel类接受一个类型参数T,用于指定ViewModel类中存储的数据的类型。在构造函数中,我们接受一个data参数并将其保存在私有成员变量data中。然后,我们定义了一个getData方法来获取存储的数据。

接下来,我们定义一个泛型ViewController类,示例代码如下:

代码语言:txt
复制
class ViewController<T> {
  private viewModel: ViewModel<T>;

  constructor(viewModel: ViewModel<T>) {
    this.viewModel = viewModel;
  }

  fetchData(): void {
    // 从ViewModel中获取数据并进行处理
    const data = this.viewModel.getData();
    // 执行其他操作...
  }
}

在这个例子中,ViewController类接受一个类型参数T,用于指定与之关联的ViewModel类的类型。在构造函数中,我们接受一个viewModel参数并将其保存在私有成员变量viewModel中。然后,我们定义了一个fetchData方法来从ViewModel中获取数据并进行处理。

使用泛型ViewModel和ViewController类的示例代码如下:

代码语言:txt
复制
// 创建一个ViewModel实例
const viewModel = new ViewModel<string>("Hello, World!");

// 创建一个ViewController实例,并关联ViewModel
const viewController = new ViewController<string>(viewModel);

// 获取并处理数据
viewController.fetchData();

在这个示例中,我们先创建了一个ViewModel实例,类型为string。然后,我们创建了一个ViewController实例,并关联了上面创建的ViewModel实例。最后,我们调用ViewController的fetchData方法来获取并处理数据。

如果你尝试从ViewModel访问变量但没有成功,可能是因为变量的访问权限限制或者变量未被正确赋值。请确保变量在ViewModel类中被正确定义和赋值,并且具有正确的访问权限。

以上是关于泛型ViewModel和ViewController类的编写示例,希望对你有所帮助。如果你需要进一步了解React相关的开发知识,可以参考腾讯云的React产品介绍:React Native

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

使用流动控制器(Flow Controller )实现 MVVM 协议模型

对于这种情况,有必要研究一下 Swift 的,虽然它仍然有一些问题。...另一个例子是抽象相似界面,如网格列表使用相同的 ViewModel 。抽象必然会更复杂些,当你的应用程序的增长或者随着时间的变化,你的收益也会越来越多。...还研究了和协议作为一种抽象问题的方法。其他的结果是构建时间明显快得多。 这些都是这几个星期的初步结果,还有其他期待的结果我会在其他文章中一一介绍。...的下一篇文章将是如何建立有效的测试,简单易维护。...不能忘记感谢 Mikail Freitas 帮助我识别协议初始化时的错误。我们永远不明白为什么在一个案例中运行好好地,而另一个则不起作用。

99640

聊聊iOS开发之MVVM的架构设计

- 使用MVVM会轻微的增加代码量,总体上减少了代码的复杂性。 MVVM 的注意事项 - viewController 尽量不涉及业务逻辑,让 viewModel 去做这些事情。...) - viewModel 引用model,反过来不行 - viewModel 绝对不能包含视图 view(UIKit.h),不然就跟 view 产生了耦合,不方便复用测试。...ReactiveCocoa或RXSwift通过这两个框架可以实现ViewModelView的双向绑定, 同样会存在几个比较重大的问题。...仅仅只暴漏了视图控制器所必需的最小量的信息,设置readonly属性很有必要,同时,视图控制器C实际上并不在乎 viewModel如何获得这些信息的。...{ /// 失败的数据处理 }]; ViewController(视图控制器)在此中的作用 1、视图控制器 viewModel获取的数据将用来: 当validLogin的值发生变化时,触发登录按钮的

8.8K92
  • 【Android】只给个如何自动初始化ViewModel与ViewBinding?这几种方案值得了解

    inflater) { return ActivityProfileBinding.inflate(inflater); } // ... } 可以是可以,但是好麻烦哦,想只给个...其实我们想要在基完成的实例化,我们目前是有两种思路,一种是反射获取到的实例,一种是通过编译器代码生成完成对象的实例创建,其中又分为APT代码生成ASM字节码插桩两个小分支。...ViewModel,第二个为ViewBinding,那么我们就能找到当前对象的class,更进一步我们甚至能通过反射调用它的方法得到 VB 的实例对象。...: emptyList() //获取到所有的 if (typeArguments.isEmpty()) return // 如果没有参数,则不生成代码 val...,但是这有点"硬编码"的意思了,一旦在基中修改了这个变量的名字就会导致异常,如果你确保不会变动,其实也可以直接用字节码插桩或者AOP面向切面自动赋值到这两个变量中。

    23210

    MVVM 面向接口型框架封装单元测试

    先送上源码地址:https://github.com/G-Joker/WeaponApp 多提一句,这个 App 是朋友最近正在努力开发的一款 app,涵盖绝大多数使用场景技术 ( RxJava...看着这么多叠加,是不是有点头晕,别急,我们后往前慢慢看。...中的两个类型都是没有 extends 来限制范围的,那么为了区分是页面 VM 还是 item 的 VM。...这样做的好处就是我们不需要手动操作构建对象并将引用保存到成员变量上了,只需要定义好具体类型参数的类型,即可通过getViewModel 获取 ViewModel 的具体实例。 继续看代码。...我们成功的在单元测试中调用了 VM 的 init 方法,也没有构造真正的 MineFragment,只是自己定义了一个 MineFragment 同类型的接口,因为面向接口的原因,VM 仍然能对其进行调用操作

    2.1K60

    iOS 面试策略之经验之谈-架构的选择

    新人可以快速上手;修改增加新的功能也没有明显障碍;即使是没有经验的开发者也可以很好维护。 缺点主要由视图层 控制器层高度耦合造成,其负面影响主要为: 代码过于集中。...任何一个或者结构体,只要不是数据或是视图,就被放在了控制器一层,而 ViewController 耦合了视图控制器,可以说这是 MVC 架构天生的缺点。...注意 ViewModel 中绝对不能包含视图层的任何或结构体。MVVM 的示意图如下: [image] 6. 试比较 MVC,MVP,MVVM 三种架构。...理论上来说,MVC 是希望视图层就是单纯的 UIView,或者 UIViewController 只负责 UI 更新交互,不涉及业务逻辑模型更新。...MVC 的中间层 Controller 持有视图模型,主要起到一个组装连接的作用,通过传递参数实例变量来直接完成所有操作。

    1K30

    Kotlin JetPack 的项目实战(一)

    浅谈 MVP MVVM MVP 公司大概 1 年半前开始改为用 MVP 模式来开发代码,相比曾经上千行的 Activity 代码,实在进步了不少,V (View) P (Presenter) 之间通过接口来互相访问与操作...随着生命周期的变化,可能出现 NPE,或者内存泄露,这确实也是我们上一个项目上线测试后出现的最多 Bug,添加了不少判空条件,更加加深了尝试其它设计模式的愿望。...T ,直接返回参数中得到的 body 函数 "()" 空括号代表函数无参数," -> T "代表函数将会返回 T 对使用函数 lock 的人来说 //大括号内就是所填入的 body 函数 lock...希望在 BaseFragment 中实现一些基础的监听者模式,基本只用到 ViewModel LiveData 2个库来完成 那先从 ViewModel 说起 abstract class BaseViewModel...{ return null } } 几个 kotlin 语法啰嗦几句,var lateinit 只能说是提示编译器,这个变量不要因为没有初始化就给我报错,我会在使用前择期初始化

    99510

    闭包是个好东西,巧用闭包实现数据绑定

    这样处理数据并没有毛病,但是如果遇到 UI 上有大量的控件需要不定时更新数据时,那通过 Delegate Notification 的方式就会显得不够优雅,所以我们才会讲到数据绑定这个知识。...今天要给大家介绍的是另一种方式,那就是使用闭包来实现数据绑定。 闭包为何物 闭包是自包含的函数代码块,可以在代码中被传递使用。闭包可以捕获存储其所在上下文中任意的常量或变量的引用。...以上就是在网上搜到的关于闭包的解释,按的理解,闭包就是一个可执行的代码块,可用作参数传入。 创建 Box 好了,不说这么多的废话了,接下来咱们就直接开始编码。...首先,为了能让 ViewModel View 之间能形成绑定,我们需要提供一种简单的机制让 ViewModel 中的数据源与 View 中的控件绑定在一起。...; Box 里定义了一个属性 value 并用 didSet 属性观察器检测有没有值发生改变,如果发生了改变,则通知 Listener 更新值; 当 Listener 在 Box 上调用 bind

    49010

    正确认识 MVCMVPMVVM

    数据的维度来说,可以细分为数据的定义、数据的存储、数据的获取。数据的定义其实就是定义数据结构,一般用实体来定义,以方便在不同角色间传递数据。数据的存储获取则可能有几种途径:数据库、网络或缓存等。...据我所知,苹果提出了这种变种,在苹果之前,有没有其他人提出该变种,不得而知。...三层架构分别为:表现层、业务逻辑层、数据访问层。虽然 MVC 的通信方式很相似,划分的各层的职责是不同的,最重要的是,两者的使用范围不同。...至于,这种模式的 MVP 是如何演化而来的,也不得而知,只知道这已经成为了当代 MVP 的标准结构。...MVP 的简单使用 我们就以一个简单的登录案例来说明如何使用 MVP,下图是该案例的图: ?

    2.7K33

    win10 uwp MVVM 轻量框架

    这样本来 ViewModel 需要写很多代码在很多个处理,所以需要的代码长度就没有那么长。 那么处理如何做?暂时就不先说了,因为从上面的描述,相信大家可以看到了框架的思想了。...将会使用一个简单的例子告诉大家如何使用。如果之前没有读过win10 uwp MVVM入门 那么建议看一下 首先是创建 ViewModel ,创建的 ViewModel 可以分为两个。...where T : IViewModel 可以在里面不需要转换。...这个还有一个,这个可以不需要转换,现在这个组合的,需要的代码很少,于是就发送消息到具有名称的,修改这个的名称为输入的名。看起来的代码很简单,只需要写构造。...现在还有很多地方没有做好,所以欢迎你告诉有哪些地方可以如何去写。

    1.2K10

    MVVM、RxJava、Retrofit三剑合璧,事半功倍

    Data标签是数据绑定的节点,用于指定该布局文件中需要用到的数据(ViewModel),Type是ViewModel的全路径,Name是给ViewModel取的变量名,后面布局中就是用这个name访问...ViewModel是MVVM里最复杂的一层。首先是名,有一个,构造函数传入实例,这个不是必须的,是自己在父定义的。...这些成员变量都是ObservableField类型或者ObservableInt类型,包着的才是layout需要的数据, 为什么要用Observable包一下呢,因为需要自动更新ui。...代码有点多,如果仅仅是写一个普通的Adapter,其实并不需要这么复杂,是想让它通用一点所以加了。...这个ViewModel只有一个成员变量,仍然是ObservableField类型,是List,这个FriendViewModel又是什么呢?

    2.5K40

    一篇可能会让你爱上MVVM与ReactiveCocoa的文章

    余下的"VM",其实是一个整体,指的是ViewModel,视图数据模型.如果你以前的许多代码都放在Model中,比如没有数据自动联网请求相关的数据什么的话,那你的那个Model其实这个ViewModel...ViewModel中的代码会很多,但是ViewModel的可复用性灵活性要远远大于ViewController.更具体点说,以前的一个控制器里面的代码,现在可能会被拆分到1个甚至多个ViewModel...为View写的数据模型: Model --> Model + ViewModel 的观点是,尽量不要使用系统自带的数据类型,比如数组,字典等作为Model,要尽可能地使用自定义地.使用自定义的,方便后期维护...我们成功控制器中剥离了网络请求以及数据分页的相关代码.整体代码量的角度,我们可能没少写几行代码;但是代码复用性的角度考虑,我们的代码更具有可复用性,因为将来可能其他地方也会用到这个页面;与此同时...如果,你刚好看到这篇文章,想对你说的是: 耐下心,花一两天结合自己的工程基础的RAC语法,尝试用RAC写写代码试试,真的很赞,而且是有足够的姿势完全兼容以前的自己写法的!

    1.3K60

    win10 uwp MVVM 轻量框架

    这样本来 ViewModel 需要写很多代码在很多个处理,所以需要的代码长度就没有那么长。 那么处理如何做?暂时就不先说了,因为从上面的描述,相信大家可以看到了框架的思想了。...将会使用一个简单的例子告诉大家如何使用。如果之前没有读过win10 uwp MVVM入门 那么建议看一下 首先是创建 ViewModel ,创建的 ViewModel 可以分为两个。...where T : IViewModel 可以在里面不需要转换。...这个还有一个,这个可以不需要转换,现在这个组合的,需要的代码很少,于是就发送消息到具有名称的,修改这个的名称为输入的名。看起来的代码很简单,只需要写构造。...现在还有很多地方没有做好,所以欢迎你告诉有哪些地方可以如何去写。

    86410

    Android基于DataBinding+Koin实现MVVM模式页面快速开发框架

    源码解析 前面介绍了 ardf实现自动装载布局、自动注入 ViewModel 事件的处理的使用,那么 ardf是如何实现这些功能的呢?...• 基础支撑:封装工具、扩展事件的 Model 及接口。...3.1 自动装载布局的实现 在 2.2 的使用介绍中可以发现,自动装载布局的实现依赖了 DataBinding,将 DataBinding 通过布局文件生成的 Binding 作为传递给了 BaseBindingActivity...为了帮助大家更好的理解画了一个简单的时序图: 时序图中可以发现核心实现是在 BaseBindingActivity 的 onCreate 中,主要分为以下三步: • 调用 createDataBinding...创建对应布局的 Binding ,也就是传入的的实例 • 通过 setContentView 将实例化的 Binding 对象的 root View 设置给当前 Activity • 调用子类实现的

    1.5K20

    iOS架构设计:揭秘MVC, MVP, MVVM以及VIPER

    为什么要易用性 这并不需要回答,值得一提的是,最好的代码是从未编写过的代码。因此,你拥有的代码越少,你拥有的bug就越少。...如果你仔细回忆一下,View是Controller紧密耦合的,但是MVP的中介Presenter并没有ViewController的生命周期做任何改变,因此View可以很容易的被模拟出来。...它MVP模式看起来很像: MVVM也将ViewController视作View 在ViewModel之间没有耦合 此外,它还有像Supervising版本的MVP那样的绑定功能,这个绑定不是在View...绑定 在MVP部分已经提到这点了,但是在这里我们来继续讨论。 绑定是OS X开发中衍生出来的,但是我们没有在iOS开发中使用它们。当然我们有KVO通知,但它们没有绑定方便。...虽然个人感觉这是在用高射炮打蚊子。 总结 我们研究了几种架构模式,希望你能找到一些困扰你的问题的答案。毫无疑问通过阅读这篇文章你应该已经认识到了没有绝对的解决方案。

    1.4K20

    技术趋势:是什么让MVC悄然消失的?「建议收藏」

    “ Model ”有对数据直接访问的权力,“Model”不依赖“View”“Controller”,Model 不关心它会被如何显示或是如何被操作。...在 View 中一般没有程序上的逻辑。为了实现 View 上的刷新功能,View 需要访问它监视的数据模型(Model),因此应该事先在被它监视的数据那里注册。...MVC中的M就是单纯的网络获取回来的数据模型,V指的我们的视图界面,而C就是我们的ViewController。...在其中,ViewController负责ViewModel之间调度,View发生交互事件会通过target-action或者delegate方式回调给ViewController,与此同时ViewController...可惜在MVVM这几个英文单词中并没有它的一席之地,它的最主要作用是在ViewViewModel之间做了双向数据绑定。如果MVVM没有Binder,那么它与MVC的差异不是很大。

    74620

    WPF 轻量级 MVVM 框架入门 2.1.2 安装项目要求创建主页面找到 ViewModel通过附加属性找到 ViewModel跳转页面跳转命令自定义命令

    本文告诉大家如何使用本金鱼的 MVVM 轻量框架。 一个好的框架是不需要解释就可以让大家使用,但是本金鱼没有这个能力,所以就写了这个文章告诉大家如何使用。...只要存在 UWP WPF 不相同的库,就把这写封装在不同的库。...到 ViewModelPage 的方法就是通过创建 ViewModelPage 合并,创建的时候提供两个方法,一个是输入 Type 的方法,另一个是。...ISawbelChaceredisModel 就没有处理消息 定义了消息还需要定一个告诉如何处理这个消息 public class SawbelChaceredisComposite : Composite...因为 SawbelChaceredisComposite 消息是耦合的,只有处理知道消息,所以这里可以转换 ViewModel 因为这时知道是哪个收到 这里的处理还可以继承Composite 这里的就是消息的类型

    1.2K20

    win10 uwp 轻量级 MVVM 框架入门 2.1.5.3199

    一个好的框架是不需要写教程大家看到就会用,但是本金鱼没有那么好的技术,所以需要写很长的博客告诉大家如何使用的框架。...需要 INavigatableViewModel INavigatablePage 的原因是,这个还有在 WPF 使用,大家都知道 WPF 的 Frame 跳转 UWP 的相同,所以需要传入不同的...,那么在开发的时候有一个问题,ViewModel 是写在 页面进行创建还是外面创建然后传进来。...,需要强转,之前想使用的方法让页面指定 ViewModel ,但是存在一个文件是 xaml 对支持不好,所以不在 UWP 使用这个方法 /// ...{ get; set; } 在页面使用请看 win10 uwp 如何让 Page 继承 现在就可以使用 WastounowMearhallworcelModel ,在 WastounowMearhallworcelModel

    1.3K20

    技术趋势:是什么让MVC悄然消失的?

    MVC这门技术伴随着的成长,感情Java一样深厚,但是,最近两年却不得不和MVC说再见了。是的,不是Struts没了,也不是SpringMVC没了,而是MVC这种架构模式被淘汰了。...“ Model ”有对数据直接访问的权力,“Model”不依赖“View”“Controller”,Model 不关心它会被如何显示或是如何被操作。...在 View 中一般没有程序上的逻辑。为了实现 View 上的刷新功能,View 需要访问它监视的数据模型(Model),因此应该事先在被它监视的数据那里注册。...MVC中的M就是单纯的网络获取回来的数据模型,V指的我们的视图界面,而C就是我们的ViewController。...可惜在MVVM这几个英文单词中并没有它的一席之地,它的最主要作用是在ViewViewModel之间做了双向数据绑定。如果MVVM没有Binder,那么它与MVC的差异不是很大。

    82220

    ViewModels and LiveData- Patterns + AntiPatterns

    这个系列做了协程Flow开发者的一系列文章的翻译,旨在了解当前协程、Flow、LiveData这样设计的原因,设计者的角度,发现他们的问题,以及如何解决这些问题,pls enjoy it。...视图通常没有单元测试(除非你使用Robolectric),所以代码行数越少越好。视图应该只知道如何显示数据并将用户事件发送到ViewModel(或Presenter)。这就是所谓的被动视图模式。...视图如何区分正在加载的数据、网络错误一个空列表? 你可以ViewModel中暴露出一个LiveData。例如,MyDataState可以包含关于数据是否正在加载、是否已经成功加载或失败的信息。...✅考虑边缘情况、泄漏以及长期运行的操作会如何影响你架构中的实例。 ❌ 不要在ViewModel中放置对保存清洁状态或与数据有关的逻辑。你ViewModel进行的任何调用都可能是最后一次。...img 如果你尝试这种方法,会有一个问题:如果你不能访问LifecycleOwner,你如何ViewModel订阅Repository?

    1.1K30

    唯一可行的 iOS 架构

    ViewModel 也变得像 Controller 一样臃肿时,该怎么办?社区也因此分裂为喜欢 MVVM 的人和不喜欢 MVVM 的人。 MVP 解决此问题的另一种尝试是 MVP。...它开始将 ViewController 视为 View,所有逻辑都交给新 Presenter。但是它并没有流行起来,因为它看起来真的很奇怪。...您可能会感到惊讶,实际上就是 MVC。想要做的是从头开始,原始资料中阅读 MVC,然后停止使用它。如果它还活着,也许还不算坏? 原始的 MVC 许多 iOS 开发人员抱怨 MVC。...因此,尝试创建一个新的 Presenter 并将 UIViewController 视为一个视图是没有意义的。...我们可以在 Person 编写此逻辑吗?好了,在这种情况下,我们将根据 MVC 原理将表示业务逻辑混合在一个不好的中。很难理解为什么有此代码。我们看不到该代码是针对哪个具体视图编写的。

    1.3K20
    领券