|
|
1
0
在你读过的大多数例子中,你可能看到这样的东西:
在这种情况下,确保控制器直接更新文本字段,但是由于mytextfield通常是iboutlet,所以它可以是视图中的任何文本字段,甚至可以是nil。很可能它甚至不需要知道它是一个nstextfield,只要它响应一个setStringValue方法。从这个意义上讲,控制器和视图是分离的。 在上面的评论中,您关注的是mvc中职责的分离,但并没有太多提到这个模型。使用cocoa绑定,您可以直接绑定到模型密钥路径,在这种情况下,模型不需要知道任何关于视图的信息。 mvc是一个模棱两可的概念,没有严格的定义。对不同的人来说可能意味着不同的事情。对我来说,这意味着视图对控制器的了解(通过出口或绑定)对模型的了解有限(通过绑定)。控制者对模型有充分的了解,对视图的了解有限(通过出口)。最后,模型对视图的知识为零,理想情况下对控制器的知识为零。 关于您的第二个问题,我不使用j2ee,但是我认为您可以通过让控制器更新一个上下文ivar(可能是nsdictionary),然后在您的视图中用一个keypath绑定到这个上下文来实现您的要求。但是没有必要把所有的东西都包装起来绑定是非常多版本的,你可以绑定到任何属性。 |
|
|
2
1
我不明白你的第二个问题(我从未使用过j2ee),但我想我可以在回答你的第一个问题上取得一些进展。 Cocoa没有强制执行MVC;它只是强烈地鼓励它——特别是对于大型项目。以一个示例程序为例,该程序具有绑定到nsarraycontroller的nstableview。 在本例中,nstableview显然是视图(它的名称中有“view”一词),nsarraycontroller显然是控制器(它的名称中有“controller”一词)。 模型是nsarray,nsarraycontroller知道它,但是您可能不会直接与该模型交互。相反,您将要求nsarraycontroller通过向数组控制器(而不是数组本身)发送addobject:和removeobject:消息来操作其模型。 执行此操作时,nsarraycontroller将通过绑定在nstableview中影响更改。同样,您也不会要求nstableview做任何事情。 所以你从不跟风景说话,也从不跟模特说话。你想发生的一切都会通过控制器。 MVC。QED。 当然,也许项目的工作方式,视图应该是它自己的控制器。世界不会结束,尽管你可能会发现,要违背框架的基本原则会更困难一些。但是,您应该始终尝试使用最好的方法来完成手头的工作,而不是坚持某种设计模式的纯粹性。 |