gpt4 book ai didi

php - 有没有办法在我的 PHP MVVM 设计中使用 jQuery?

转载 作者:行者123 更新时间:2023-12-01 03:17:32 26 4
gpt4 key购买 nike

一些背景:我来自 .Net 环境,我们必须在所有项目中使用 MVVM 将 View 与 View 模型分开。现在我正在开发自己的个人 PHP 项目,我决定使用相同的设计并将 View 和 View 模型分开。

因此,在 View 上,我创建了一个 View 模型对象,并在必要时调用后台函数,在 View 中,代码仅提供显示。

示例:

查看.php

<?php
include('viewmodel.php');

$vm = new viewmodel.php();

if(some condition)
{
$vm->doSomething();
}
?>
<html>
<body>
//some form code
</body>
</html>

viewmodel.php

<?php
//includes

class viewmodel
{
function viewmodel()
{
}

function doSomething()
{
}
}
?>

现在我已经学会了 jQuery,我想用它来使我的页面更加动态,减少服务器之间的来回流量,并且减少页面刷新的需要。

我见过这样的调用,允许 jQuery 调用带有一些发布数据的 php 页面:

$.ajax({ url: '/my/site',
data: {action: 'test'},
type: 'post',
success: function(output) {
alert(output);
}
});

但是,这不再是面向对象的设计,我必须从 View 模型中删除所有类定义才能使其工作。

jQuery 有没有办法对 View 模型进行这些调用,或者使用 jQuery 是否意味着您必须返回到过程式编程风格?

最佳答案

However this is no longer Object Oriented Design and I would have to remove all the class definitions from my viewmodels for this to work.

是什么让你这么想?向服务器发出 AJAX 请求本质上不存在面向对象或非面向对象的问题。这些客户端发起的请求对服务器端代码的架构也没有任何影响。

在您的 View 中,您可以拥有任何您想要的 JavaScript 代码。它不会对呈现 View 的服务器端代码产生影响,因为 JavaScript 就其而言只是文本,与 HTML 没有什么不同。

对于服务器端处理程序,您可能想要做的是为 jQuery 代码调用的“页面”(“资源”是一个更准确的词)创建全新的 View 和 View 模型。

因此,例如,您可能会从浏览器收到对 /my/site 之类的请求,该请求将使用您现有的架构填充 View 模型以绑定(bind)到 View 并将该 View 返回给客户端。该 View 将包含一些 JavaScript 代码,其中一些代码调用另一个资源。假设其他资源类似于 /api/products,它返回用户可用的“产品”列表。

请注意,我将资源放在不同的路径下,api 而不是 my。这是一个非常武断的决定,它只是用来说明在这种情况下返回的不是“页面”,而是自动化 API 的 JSON 数据。当然,资源的实际名称可以是您喜欢的任何名称。

此资源仍然可以是 View 并绑定(bind)到 View 模型,但在这种情况下, View 是 JSON 数据而不是 HTML。与任何事情一样,您可以通过多种方法来做到这一点。快速谷歌搜索出现了another question其中讨论了几种生成 JSON 数据的方法之间的差异。事实上,在这种情况下,您的“ View ”可能完全是空的,您所做的就是将 View 模型序列化为 JSON 并返回它。 (我的 PHP 相当生疏,但 ASP.NET MVC 的等效方法是返回 Json()ActionResult,而不是 View() .)

请记住,从服务器端代码的角度来看,返回 HTML View 与返回 JSON(或 XML、原始文本或其他任何内容) View 之间没有区别。 View 就是 View ,每个 View 都独立于其他 View 。

关于php - 有没有办法在我的 PHP MVVM 设计中使用 jQuery?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13953536/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com