jjzjj

javascript - 面向对象的 JavaScript 最佳实践问题 : How should I configure my objects for the following

coder 2025-01-09 原文

我决定我需要提高我的 javascript 编程技能,以及我的 OO 技能。我目前正在阅读一些书籍,但有时如果不先看一些实际例子就很难掌握理论。所以,我有一个关于以下场景的“最佳实践”的理论问题......

我想创建一个 OO 脚本来显示从服务器检索到的搜索标签记录列表。我还希望能够就地编辑每个搜索标签记录。

目前,我在 jQuery 库的帮助下按程序执行此操作:

我从服务器接受一个 JSON 编码的搜索标签记录列表。它看起来像这样:

[
   { "searchTagName" : "tagOne", "searchTagID" : "1" },
   { "searchTagName" : "tagTwo", "searchTagID" : "2" },
   { "searchTagName" : "tagThree", "searchTagID" : "3" },
   etc...
]

我将 JSON 直接转储到 jTemplates 中以创建适当的 html,如下所示:

$("#searchTagList")
   .setTemplateElement("template_searchTagList")
   .processTemplate(searchTagData);

最后,我希望可以使用就地编辑方法修改每个搜索标签,因此我将预构建的就地编辑方法附加到每个 html 元素:

$(".searchTag").editInPlace();

这在程序上非常有效。也许最明智的做法是不去管它。 :) 但是,为了争论起见,从 OO 的 Angular 来看,编写这样的东西的最佳方法是什么。

我是否应该有一个单独的对象“searchTagList”,其中包含用于上述每个步骤的方法?

var searchTagList = 
{
    searchTagData: JSONdata,
    renderList: function () { /*send to jTemplates */ }
    bindEdit: function() { /* attach edit-in-place */ }
}

或者这是不正确的? (似乎我所做的只是将我的过程函数包装在一个对象中。)我是否应该以某种方式将 JSON 数据解析为每个搜索标签的实例,然后将单独的方法附加到每个搜索标签? (这似乎是一个很大的开销,没有任何收获。)

如果我觉得我挑剔毛发,请提前致歉。但我真的很想把这些东西记在脑子里。

谢谢,

特拉维斯

最佳答案

实际上,您发布的 jQuery 示例不是过程性的,它们是面向对象的。具体来说,它们是来自 OO 设计的 Fluid Programming 流派的可链接对象的实现。

程序会是这样的:

var el = cssQuery("#searchTagList");
var templateObject = makeTemplate(el,"template_searchTagList");
processTemplate(templateObject,searchTagData);

功能类似于:

processTemplate(
    makeTemplate(
        cssQuery("#searchTagList"),
        "template_searchTagList"
    ),
    searchTagData
);

jQuery 在对象化 DOM API 方面做得非常好。可以将它用作您自己的 OO DOM 库的灵感。另一个我建议您看的是 YUI3(YUI2 非常程序化)。

具体来说,jQuery和YUI3的通用模式是:

nodeListConstructor(query_string).nodeMethods();

他们定义了一个类似 OO 的节点对象来包裹 DOM HTMLElements,然后定义了另一个 OO 风格的 nodeList 对象以允许您批处理节点。在我看来,这是一个很好的设计模式。

关于javascript - 面向对象的 JavaScript 最佳实践问题 : How should I configure my objects for the following,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2261802/

有关javascript - 面向对象的 JavaScript 最佳实践问题 : How should I configure my objects for the following的更多相关文章

随机推荐