javascript代码应该具备多少DOM知识
How much knowledge of the DOM should javascript code have?
我正在C#
和ASP.NET MVC 3
中的站点上实现OpenID和OAuth。我以DotNetOpenAuth作为后端,以openid选择器作为前端。
我喜欢openid选择器,但它没有开箱即用的OAuth支持,所以我开始对它进行调整(借助StackOverflow的实现和js美化程序)。
我发现了很多这样处理DOM的代码:
function highlight(boxId) {
// remove previous highlight.
var highlight = $('#openid_highlight');
if (highlight) {
highlight.replaceWith($('#openid_highlight a')[0]);
}
// add new highlight.
$('.' + boxId).wrap('<div id="openid_highlight"></div>');
};
或
function useInputBox(provider) {
var area = $('#openid_input_area');
var id = 'openid_username';
var html = '';
var value = '';
var style = '';
var label = provider.label;
if (label) {
html = '<p>' + label + '</p>';
}
if (provider.name == 'OpenID') {
id = this.input_id;
value = 'http://';
style = 'background: #FFF url(' + spritePath + ') no-repeat scroll 0 50%; padding-left:18px;';
}
html += '<input id="' + id + '" type="text" style="' + style + '" name="' + id + '" value="' + value + '" />'
+ '<input id="openid_submit" type="submit" value="' + this.signin_text + '"/>';
area.empty();
area.append(html);
$('#' + id).focus();
};
在我看来,这两种方法都对DOM进行了过多的假设(过多的id或DOM的当前状态)。
javascript与DOM紧密耦合可以吗?避免这样的代码并采用侵入性较小的方法的最佳方法是什么?
我想让我困惑的是这个电话:
openid.init('openid_identifier', '', 'http://cdn.sstatic.net/Img/openid/openid-logos.png?v=8', true);
当脚本文件中已经有这么多假设时。
我认为,因为你怀疑这是一件坏事。
Javascript UI开发中非常缺乏设计模式。我猜很多人都是直接从html开始的,学习一些jQuery,编写web应用程序。
backbone.js是一个简单的系统(我发现),它能更好地处理这一问题。源代码清晰可见,它很好地将视图问题与业务逻辑问题分离开来。
- http://documentcloud.github.com/backbone/
- http://martinfowler.com/eaaDev/uiArchs.html
对于更MVVM的方法(也称为数据绑定),knockoutjs也是一个选项。他们还有一个很好的互动教程,让你开始。
相关文章:
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 如何在DOM元素上按类型构建此函数
- Windows形成web浏览器控件和Javascript更改的DOM
- Datatables:通过DOM数据源中的名称引用列
- 在DOM中查找一个模式并替换它's的内容使用jquery
- DOM事件通过JSON转换为java
- 将DOM节点值与字符串Javascript进行比较
- 如何通过溢出来判断元素被切断了多少像素:隐藏在父级上
- delete在Object上效率低下,但在DOM Element's的数据属性,与null out相比
- 流星中DOM的繁殖
- DOM元素和angular元素之间的主要区别是什么
- 当带有渲染器的DOM元素不在屏幕顶部时,移动了场景的坐标
- HTML DOM 查找的时间复杂度是多少?
- javascript代码应该具备多少DOM知识
- 一个浏览器可以处理多少DOM元素
- 如果我移动一个小图像,会刷新多少DOM
- dom中的data属性可以放置多少数据?
- 使用DOM和封装方法,用Javascript OOP传递参数.多少就太多了