我正在编写API,不幸的是需要避免任何jQuery或第三方库.事件究竟是如何通过jQuery绑定到元素的?
jQuery示例:
$('#anchor').click(function(){
console.log('anchor');
});
Run Code Online (Sandbox Code Playgroud)
我很沮丧地在元素上编写onClick属性,但我想理解jQuery事件和DOM元素之间的联系.
当标记本身没有改变时,元素知道如何知道触发jQuery事件?他们如何捕获DOM事件并覆盖它?
我已经创建了自己的Observer处理程序,但是不能理解如何将元素链接到Observer事件.
我目前正在开发一个ReactJS项目,我需要创建"可重用"组件,其中一些方法需要被"覆盖".在OOP中我会使用多态.我已经做了一些阅读,似乎共识是使用HoC /组合但我无法弄清楚如何实现这一目标.我想如果我可以使用合成得到一个ES6样本,那么之后可能更容易将这个想法改编为ReactJS.
下面是我想在ReactJS中实现的ES6 OOP示例(忽略处理它仅用于测试的事件).有没有人对如何将ReactJS组件分解为HoC有一些指导,或者甚至只是演示如何根据示例在ES6中使用组合?
class TransferComponent {
constructor(){
let timeout = null;
this.render();
this.events();
}
events(){
let scope = this;
document.getElementById('button').addEventListener('click', function(){
scope.validate.apply(scope);
});
}
validate(){
if(this.isValid()){
this.ajax();
}
}
isValid(){
if(document.getElementById('username').value !== ''){
return true;
}
return false;
}
ajax(){
clearTimeout(this.timeout);
document.getElementById('message').textContent = 'Loading...';
this.timeout = setTimeout(function(){
document.getElementById('message').textContent = 'Success';
}, 500);
}
render(){
document.getElementById('content').innerHTML = '<input type="text" id="username" value="username"/>\n\
<button id="button" type="button">Validate</button>';
}
}
class OverrideTransferComponent extends TransferComponent{
isValid(){
if(document.getElementById('username').value !== '' && document.getElementById('password').value !== ''){
return true; …Run Code Online (Sandbox Code Playgroud)我需要找到一种全局方法来阻止jQuery on('click')事件触发,如果一个锚具有disabled ="disabled"(是的,我知道这不是一个锚的有效属性)属性集.锚也可以随时动态设置为禁用.
另一个问题是当我在"框架"中工作时触发命令,并且App类加载第一个和后续类,其后加载锚事件.理想情况下,id喜欢在App类中有一些东西阻止"子"类事件被触发,但是当前子类事件首先触发,然后使用stopPropagation()的App事件也不起作用.
我对一些解决方案很谨慎,比如如何订购与jQuery绑定的事件,因为你可以看到这可能会在jQuery版本之间中断.
继承人控制器:
class HomeController extends BaseController {
public function index() {
return View::make('home', array('username' => 'Vaughan'));
}
}
Run Code Online (Sandbox Code Playgroud)
这里是主刀片视图:
{{ $username }}
Run Code Online (Sandbox Code Playgroud)
然而,视图正在输出:
{{ $username }}
Run Code Online (Sandbox Code Playgroud)
变量未呈现.这可能与Apache或PHP有关吗?
首先,因为我在共享主机上,所以我无法将公用文件夹的内容直接放入根目录中。我必须将整个项目放入 public_html 目录中,并使用 .htaccess 指向公共文件夹,如下所示(这对于单个 Laravel 项目效果很好):
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/$1 [L]
Run Code Online (Sandbox Code Playgroud)
现在,我使用主机创建了一个子域,并在我的 public_html 目录中创建了一个名为 store.domain.com 的目录。这将用于一个完全不同的 Laravel 项目。如果我将带有 .htaccess 文件的常规文件夹结构放入此子域文件夹中,则在访问子域时会收到 503 错误。我与主机交谈,当他们建议删除根 .htaccess 文件时,子域开始工作,但主域崩溃了。
几天来我一直在努力阅读 WordPress 上其他人类似问题的各种解决方案,但无法让任何东西正常工作。下面的解决方案有点有效,但它不断将公共文件夹添加到我的子域 URL(根域项目工作正常):
RewriteBase /
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{HTTP_HOST} ^store.mc.com
RewriteRule ^(.*)$ /public/$1 [L]
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{HTTP_HOST} !^store.mc.com$
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ /public/$1 [L]
Run Code Online (Sandbox Code Playgroud)
有人遇到过这个问题或者知道如何解决吗?