- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 PHP 中使用依赖注入(inject)(标记为 b.c. 用作比较),因为这似乎是最佳实践。 PHP 有更多面向 OO 编程的结构,但在 JavaScript 中使用 DI 似乎也可以实现解耦代码。
就我而言,这有点复杂。我的对象包含对象属性(函数对象),每个属性都有自己的依赖项。
下面是有问题的代码,它具有我在顶级对象内创建的 3 个依赖项,但正在考虑注入(inject)。
当它们在单个对象 MC.MATweet 中的不同函数对象中使用时,我到底应该在哪里注入(inject)它们?
这 3 个对象是 SText、SMessage 和 SUniversals。
/**
** MATweet - Text, Universal, Message - Inject?
*/
MC.MATweet = {
init: function() {
var tweet_button = document.getElementById( 'po_but' ),
tweet_input = document.getElementById( 'po_in' );
tweet_button.addEventListener( "click", function() {
MC.Controller( MC.o_p( 'MATweet' ) );
}, false );
tweet_input.addEventListener( "keypress", function( event ) {
if( event.keyCode === 13 ) {
MC.Controller( MC.o_p( 'MATweet' ) );
event.preventDefault();
}
}, false );
sStyle( [ "po_in","po_lab" ] );
},
pre : function( o_p ) {
var form_elements = document.getElementById( 'fo_po' ).elements,
text_object = new SText( form_elements ),
universal_object = new SUniversals();
if( universal_object.get('load') === '1' )
{
if( !text_object.checkEmpty() ) {
return MC.MATweet.message( 'empty', o_p );
}
if( !text_object.checkPattern( 'tweet' ) ) {
return MC.MATweet.message( 'tweet', o_p );
}
}
o_p.args.hash = localStorage.hash;
o_p.page = text_object.getArray();
return o_p;
},
post : function( o_p ) {
if( o_p.server.result === 'true' ) {
MC.C.resetView( 'po_in' );
vTPane( o_p.server.tweets );
}
},
message: function( type, o_p )
{
var response_element = document.getElementById( 'i_box_rr' ),
pane_element = document.getElementById( 'i_box_r_post' ),
message_object = new SMessage( response_element ),
cover_element = document.getElementById( 'po_but_cov' );
o_p.result = 'complete';
message_object.display( type );
cover_element.style.display = 'inline';
MC.MATweet.movePane( pane_element, 30, 'down' );
return o_p;
},
movePane: function( pane_element, pos, dir ) {
if( ( dir === 'down' ) && ( pos < 70 ) ) {
pos += 1;
pane_element.style.top = ( pos ) + 'px';
setTimeout( function( ){ MC.MATweet.movePane( pane_element, pos, dir ); }, 1 );
}
else if( ( dir === 'down' ) && pos === 70 ) {
dir = 'up';
setTimeout( function( ){ MC.MATweet.movePane( pane_element, pos, dir ); }, 2000 );
}
else if( ( dir === 'up' ) && ( pos > 30 ) ) {
pos -= 1;
pane_element.style.top = ( pos ) + 'px';
setTimeout( function( ){ MC.MATweet.movePane( pane_element, pos, dir ); }, 1 );
}
else if( ( dir === 'up' ) && ( pos === 30 ) ) {
document.getElementById( 'po_but_cov' ).style.display='none';
}
},
};
最佳答案
你是对的,示例代码很脆弱并且依赖于系统的许多其他部分。
但是这个类不会因为添加依赖注入(inject)而变得更简单——它只会更难阅读和修改。问题不在于它命名了它调用的外部功能,而在于它首先调用了如此多的外部代码片段。
现在,此代码处理用户输入推文、发送到服务器的推文以及显示的推文之间的所有编码和交互。难怪是个毛团。将它们分成单独的类,每个类只负责一件事,并通过事件进行通信,而不是通过相互调用。
因此,您的推文输入 View 类仅负责发出包含单个字符串和推文文本的“new_tweet”消息。
您的推文显示 Pane 类监听推文列表的更改并重绘自身。
创建推文输入 View 的 Controller 代码,还将“new_tweet”事件的监听器附加到它,然后发送这些新推文以发布到服务器。
通过这种方式,您的代码将最大限度地减少交织,从而提高理解性、可重用性和美观性。
关于php - 使用 JavaScript 进行依赖注入(inject) |有用还是没用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11768407/
我正在尝试测试依赖于其他服务 authService 的服务 documentViewer angular .module('someModule') .service('docu
如果我的网站上线(不要认为它会,目前它只是一个学习练习)。 我一直在使用 mysql_real_escape_string();来自 POST、SERVER 和 GET 的数据。另外,我一直在使用 i
我有以下代码,它容易受到 SQL 注入(inject)的攻击(我认为?): $IDquery = mysqli_query($connection, "SELECT `ID` FROM users W
我一直在自学如何创建扩展,以期将它们用于 CSS 注入(inject)(以及最终以 CSS 为载体的 SVG 注入(inject),但那是以后的问题)。 这是我当前的代码: list .json {
这个简单的代码应该通过 Java Spring 实现一个简单的工厂。然而结果是空指针,因为 Human 对象没有被注入(inject)对象(所以它保持空)。 我做错了什么? 谢谢 配置 @Config
我正在编写一个 ASP.NET MVC4 应用程序,它最终会动态构建一个 SQL SELECT 语句,以便稍后存储和执行。动态 SQL 的结构由用户配置以用户友好的方式确定,具有标准复选框、下拉列表和
首先让我说我是我为确保 SQL 注入(inject)攻击失败而采取的措施的知己。所有 SQL 查询值都是通过事件记录准备语句完成的,所有运算符(如果不是硬编码)都是通过数字白名单系统完成的。这意味着如
这是 SQL 映射声称可注入(inject)的负载: user=-5305' UNION ALL SELECT NULL,CONCAT(0x716b6b7071,0x4f5577454f76734
我正在使用 Kotlin 和 Android 架构组件(ViewModel、LiveData)构建一个新的 Android 应用程序的架构,并且我还使用 Koin 作为我的依赖注入(inject)提供
假设 RequestScope 处于 Activity 状态(使用 cdi-unit 的 @InRequestScope) 给定 package at.joma.stackoverflow.cdi;
我有一个搜索表单,可以在不同的提供商中搜索。 我从拥有一个基本 Controller 开始 public SearchController : Controller { protected r
SQLite 注入 如果您的站点允许用户通过网页输入,并将输入内容插入到 SQLite 数据库中,这个时候您就面临着一个被称为 SQL 注入的安全问题。本章节将向您讲解如何防止这种情况的发生,确保脚
我可以从什么 dll 中获得 Intercept 的扩展?我从 http://github.com/danielmarbach/ninject.extensions.interception 添加了
使用 NInject 解析具有多个构造函数的类似乎不起作用。 public class Class1 : IClass { public Class1(int param) {...} public
我有一个 MetaManager 类: @Injectable() export class MetaManager{ constructor(private handlers:Handler
我是 Angular 的新手,我不太清楚依赖注入(inject)是如何工作的。我的问题是我有依赖于服务 B 的服务 A,但是当我将服务 A 注入(inject)我的测试服务 B 时,服务 B 变得未定
我正在为我的项目使用 android 应用程序启动、刀柄和空间。我在尝试排队工作时遇到错误: com.test E/WM-WorkerFactory: Could not instantiate co
我不确定这是什么糖语法,但让我向您展示问题所在。 def factors num (1..num).select {|n| num % n == 0} end def mutual_factors
简单的问题,我已经看过这个了:Managing imports in Scalaz7 ,但我不知道如何最小化注入(inject) right和 left方法到我的对象中以构造 \/ 的实例. 我确实尝
在我的 Aurelia SPA 中,我有一些我想在不同模块中使用的功能。它依赖于调用时给出的参数和单例的参数。有没有办法创建一个导出函数,我可以将我的 Auth 单例注入(inject)其中,而不必在
我是一名优秀的程序员,十分优秀!