MVP模式与Javascript框架?

MVP模式与Javascript框架?,javascript,mvp,Javascript,Mvp,有人能够用javascript框架实现MVP模型吗?我很难弄清楚如何让presenter->view从服务器代码转换为javascript。我有一些想法,但有点粗俗,我想看看其他人在做什么。查看。它们还有JavaScript的端口。另一个,对于jQuery用户: 需要注意的是,ExtJS自4.0版以来也支持MV(x)模式,我将以ExtPerson的身份提到它。与大多数框架一样,他们也将其称为“MVC”(正如JS世界中的大多数人所看到的,与TodoMVP相反)。然而,从实用的角度来看,Ext中有工

有人能够用javascript框架实现MVP模型吗?我很难弄清楚如何让presenter->view从服务器代码转换为javascript。我有一些想法,但有点粗俗,我想看看其他人在做什么。

查看。它们还有JavaScript的端口。

另一个,对于jQuery用户:


需要注意的是,ExtJS自4.0版以来也支持MV(x)模式,我将以ExtPerson的身份提到它。与大多数框架一样,他们也将其称为“MVC”(正如JS世界中的大多数人所看到的,与TodoMVP相反)。然而,从实用的角度来看,Ext中有工具来实现模式的C/P部分,使其最适合您的需要。模式是有用的,但和大多数东西一样,如果以教条的方式对待,它会限制你的思维。

谷歌GWT似乎在使用MVP:


请访问查看angular project,并随时向邮件组询问任何问题

它的设计目的是与jQuery配合使用。
对于编写可测试的MVC JS应用程序非常有用。

看看哪一个是用于网页的MVVM框架。它提供了一个非常漂亮且易于扩展的框架,用于以松散耦合的方式链接模型和视图。

MVP的主要目标是解耦代码中的不同方面。通常,在JavaScript中,有三个主要方面:

  • 事件处理
  • DOM操作
  • 服务器通信(AJAX调用)
  • 对于每一个问题,MVP都有一个相应的术语:

  • EventHandling=演示者
  • DOM操纵=视图
  • AJAX调用=模型
  • 事实上,实现这三个方面并不总是简单的,因此事件总线可能会派上用场。该总线应该是一个单例,在各种上下文中引发的所有事件都应该发布在总线上。演示者需要注册其事件,并在事件发生时做出相应的反应

    以下是它的工作原理:

    发生的第一件事是页面加载。使用普通事件模型或jQuery或任何方便的方法来听这个。创建模型、视图和演示者。演示者需要保留视图和模型实例,因为他将使用它们

    var model = new Model();
    var view = new View();
    var presenter = new Presenter(model, view);
    
    请记住,Presenter是事件处理程序,因此总线应该了解它并将事件路由到它进行处理:

    bus.registerHandler(presenter);
    
    第一个事件是“init”,这意味着页面已加载且MVP对象已全部设置:

    bus.init(); // call this yourself
    
    这将触发演示者中的某些内容,如函数。我更喜欢。。。命名约定,在此示例中为presenter.onInit()。这样就有机会安装UI侦听器:

    // in the Presenter
    onInit: function() {
      view.addSubmitListener();
      view.addWhateverListener();
      ...
    }
    
    // in the View (using jQuery)
    addSubmitListener: function() {
      $("#submitButton").click(function() {
        var formData = ...
        bus.submit(formData); // publish an event to the bus
      });
    }
    
    单击Submit按钮时,将调用bus.Submit(formData),并将其路由到处理程序--presenter.onSubmit(formData):

    等等。。。整个技巧是将总线绑定到演示者,然后您就进入了循环


    HTH

    我知道这个问题很古老,但我认为它值得在这里提及。我的票投给Backbone.js。即使docs说它是MVC,我也会说它是MVP

    • 视图=html模板(jQuery.template)
    • 模型=主干。模型
    • PRESENTER=Backbone.View(视图tempate和如何将数据绑定到它之间的层,以及您可以做的更多事情),以及在呈现方法耦合视图(html模板)中可以使用的最佳方法或切换使用的方法
    还有什么是最好的控制器

    • 控制器=主干。控制器
    另一种选择可能是@JoshRivers提到的knockoutJS,但我个人的观点是,视图模板充斥着绑定内容


    最后一个音符。MVC或MVP中的V都可以从模板中构建,而无需对其进行编码。做一个好的HTML模板解析器,你就可以开始了:)相信我,约定是你的朋友。

    我们这里谈论的是MVP!不是MVC!我认为这个行业还没有为MVP做好准备。每个人都在努力掌握MVC。

    看看-一个全新的独立1kB(!)MVP微库,它拥有构建可扩展、模块化JavaScript应用程序所需的一切。还有一个完整的演示。

    正在搜索一些MVP框架的示例,并偶然发现了此链接,该链接可能对确定要使用的框架非常有用:

    尽管MVC对客户端应用程序没有用处。我建议改为使用PAC模式。@Yanick:MVC和MVP非常相似,在这种情况下可以比较。为什么?我不是老学校“JS是魔鬼的工作人员”,但即使你有大量的客户端应用程序,我也看不到好处,但只是开销。“Boldewyn,如果你不是老学校,那么认为HTML5和JavaScript相互配合。如果你认为JS是“魔鬼的作品”,那么我认为你从未学过这种语言。诚然,Javascript可能会很快变得非常混乱,但一旦结构化,它就会非常强大和通用。另外,TraceMonkey(Firefox)和V8(Chrome)都非常高效,将来还会发布更快的引擎。我并没有提到越来越多的应用程序上线,并且更容易在服务器端执行客户端。如果你不是一个老派,你应该知道所有这些…@Yanick Rochon:事实上,JavaScript是我所知道的最可爱的语言。我的意思是,除了设计良好的服务器端MVP框架之外,我看不到JS MVP框架的好处。为什么要在浏览器中加载所有的东西,而你也可以在服务器端这样做?@Boldewyn,为什么是JS MVP?因为如果您将MVP放在服务器端,那么您就错过了MVP的概念:)有了MVP,您的模型严格地放在客户机上,而服务器仅用作“存储”促进者。通常,MVP在客户机上,而MVC在服务器上。实际上,您可以将它们结合使用,以便在客户端和服务器端都具有结构化代码
    // in the Presenter
    onSubmit: function(formData) {
      model.postForm(formData, function(data) {
        // handle the response
        view.updateSomething(data);
      });
    }