也许我一直在使用像Cairngorm这样的Frameworks进行Flex开发太长时间,但我仍然没有得到MVVM.我知道Cairngorm是一个框架而MVVM是一种设计模式,但我在这里比较的是Cairngorms设计模式的实现,主要是模型视图控制器和命令模式.不要误解我的意思,我认为将视图绑定到视图模型的想法很棒,并且可测试性和设计器 - 程序员工作流程的优势很大.但是有两件事让我感到烦恼:一件是用Commands编写我的所有动作,顺便说一句,这也让我与Cairngorm接壤.只有在Cairngorm中,他们实现命令模式的方式才能让你拥有一个集中控制器用于所有命令,除非我遗漏了一些东西,否则你似乎无法使用MVVM.如果我认为实现Cairngorm中的命令在MVVM中复杂是最糟糕的,我的意思是必须创建实现ICommand的私有类,因为我所做的一切看起来都太多了.然后你遇到的问题是并非所有的控件都实现了命令,例如,如果你使用的是ListBox,我经常使用它,你运气不好; 有解决方法,但各种复杂.
困扰我的另一件事是View Models之间的沟通.在标准的模型视图控制器中,您可以收集视图观察到的集中模型的所有信息,但MVVM似乎不是这种情况,至少在我看到的示例中没有.因此,例如,如果您有一个带有列表的控件,您可以使用该列表选择一个项目,然后将该项目用作不同视图和后续操作的源,我不清楚如何在没有集中模型的情况下通知所有人.
我知道MVVMFoundation和Tom Ershamam关于WPF Commands Everywhere的工作.称我为老式,但我认为为了真正理解模式,你必须构建一个从头开始使用它的应用程序.这就是我正在做的事情,但是我一直在想我一定会错过一些必不可少的东西,因为我似乎无法在我脑海中保持这个小小的声音,一直告诉我必须有一个更好的方法.
我正在使用一个库,该库仅通过从 CDN 动态导入来提供其功能。用法是这样的:
import LibraryClass from "https://cdn.com/library-url.esm.js";
const libraryInstance = new LibraryClass();
Run Code Online (Sandbox Code Playgroud)
这在一个简单的示例中效果很好,我只是将 vanilla.js 脚本直接加载到 html 页面上。但我需要在使用 Webpack 和 TypeScript 的项目中使用它。如果我尝试构建该项目,则会收到以下错误:
目标环境不支持动态 import() 语法,因此无法在脚本中使用外部类型“模块”
我的 tsconfig 看起来像这样:
{
"compilerOptions": {
"target": "ES2018",
"module": "esnext",
"lib": ["es5","es6","dom","dom.iterable","ESNext"] ,
"allowJs": true ,
"jsx": "react",
"declaration": true ,
"sourceMap": true ,
"composite": true,
"strict": true,
"noImplicitAny": false,
"strictNullChecks": true ,
"strictPropertyInitialization": false ,
"moduleResolution": "node",
"baseUrl": "./packages",
"esModuleInterop": true ,
"allowUmdGlobalAccess": true ,
"experimentalDecorators": true,
"preserveConstEnums": true
}
}
Run Code Online (Sandbox Code Playgroud)
我的 webpack.config 像这样:
{ …Run Code Online (Sandbox Code Playgroud) 我几乎完成了我的第一个monotouch应用程序,几乎就是这样,但是对于内存泄漏的一些大问题.即使我在每个视图控制器上覆盖viewDidUnload,以便为我创建的每个UI元素首先从超级视图中删除它,然后调用Dispose然后将其设置为null,问题仍然存在.使用Instruments没有帮助,它不会检测内存泄漏,内存分配也不会指向我可以跟踪的任何内容.
我的应用程序主要使用MPMoviePlayer播放视频流,并显示通过http加载的图像的图像库.这两种操作都会引起问题.
非常感谢任何想法,谢谢.